Merging changes from develop branch to prepare for v.0.3.6 branch
Conflicts: README.TXT
This commit is contained in:
		
						commit
						d3dee115ab
					
				
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -37,6 +37,7 @@ Thumbs.db | ||||
| ####################### | ||||
| /build/ | ||||
| /Util/UUID.cpp | ||||
| /Util/GitDescription.cpp | ||||
| 
 | ||||
| # Eclipse related files # | ||||
| ######################### | ||||
| @ -81,3 +82,7 @@ stxxl.errlog | ||||
| /sandbox/ | ||||
| 
 | ||||
| /test/profile.lua | ||||
| 
 | ||||
| # Deprecated config file # | ||||
| ########################## | ||||
| /server.ini | ||||
|  | ||||
| @ -4,7 +4,7 @@ compiler: | ||||
| #  - clang | ||||
| install: | ||||
|  - sudo apt-get update >/dev/null | ||||
|  - sudo apt-get -q install build-essential git cmake pkg-config libprotoc-dev libprotobuf7 protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev libzip-dev libboost-thread-dev libboost-system-dev libboost-regex-dev libboost-filesystem-dev lua5.1 liblua5.1-0-dev libluabind-dev rubygems osmosis | ||||
|  - sudo apt-get -q install libprotoc-dev libprotobuf7 protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev libzip-dev libboost1.46-all-dev lua5.1 liblua5.1-0-dev libluabind-dev rubygems osmosis | ||||
| before_script: | ||||
|  - sudo gem install bundler | ||||
|  - bundle install | ||||
|  | ||||
							
								
								
									
										11
									
								
								AUTHORS.TXT
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								AUTHORS.TXT
									
									
									
									
									
								
							| @ -1,11 +0,0 @@ | ||||
| The following people contributed code to the Open Source Routing Machine: | ||||
| 
 | ||||
| Christian Vetter  | ||||
| Dennis Luxen | ||||
| Ruslan Krenzler | ||||
| Frederik Ramm | ||||
| Bharath Vissapragada | ||||
| Pascal Neis | ||||
| Sasa Ivetic | ||||
| Emil Tin | ||||
| Henning Moll | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BRESENHAM_H_ | ||||
| #define BRESENHAM_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "CRC32.h" | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef CRC32_H_ | ||||
| #define CRC32_H_ | ||||
|  | ||||
| @ -1,31 +1,40 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef DOUGLASPEUCKER_H_ | ||||
| #define DOUGLASPEUCKER_H_ | ||||
| 
 | ||||
| #include "../DataStructures/Coordinate.h" | ||||
| 
 | ||||
| #include <cassert> | ||||
| #include <boost/assert.hpp> | ||||
| 
 | ||||
| #include <cmath> | ||||
| #include <cfloat> | ||||
| 
 | ||||
| #include <limits> | ||||
| #include <stack> | ||||
| #include <vector> | ||||
| 
 | ||||
| @ -45,7 +54,7 @@ class DouglasPeucker { | ||||
| private: | ||||
|     typedef std::pair<std::size_t, std::size_t> PairOfPoints; | ||||
|     //Stack to simulate the recursion
 | ||||
|     std::stack<PairOfPoints > recursionStack; | ||||
|     std::stack<PairOfPoints > recursion_stack; | ||||
| 
 | ||||
|     /**
 | ||||
|      * This distance computation does integer arithmetic only and is about twice as fast as | ||||
| @ -56,12 +65,13 @@ private: | ||||
|         const int p2x = (segB.lon - segA.lat); | ||||
|         const int p2y = (segB.lon - segA.lat); | ||||
|         const int something = p2x*p2x + p2y*p2y; | ||||
|         int u = (something < FLT_EPSILON ? 0 : ((point.lon - segA.lon) * p2x + (point.lat - segA.lat) * p2y) / something); | ||||
|         int u = ( 0 == something  ? 0 : ((point.lon - segA.lon) * p2x + (point.lat - segA.lat) * p2y) / something); | ||||
| 
 | ||||
|         if (u > 1) | ||||
|         if (u > 1) { | ||||
|             u = 1; | ||||
|         else if (u < 0) | ||||
|         } else if (u < 0) { | ||||
|             u = 0; | ||||
|         } | ||||
| 
 | ||||
|         const int x = segA.lon + u * p2x; | ||||
|         const int y = segA.lat + u * p2y; | ||||
| @ -76,52 +86,82 @@ private: | ||||
| 
 | ||||
| 
 | ||||
| public: | ||||
|     void Run(std::vector<PointT> & inputVector, const unsigned zoomLevel) { | ||||
|     void Run(std::vector<PointT> & input_geometry, const unsigned zoom_level) { | ||||
|         { | ||||
|             assert(zoomLevel < 19); | ||||
|             assert(1 < inputVector.size()); | ||||
|             std::size_t leftBorderOfRange = 0; | ||||
|             std::size_t rightBorderOfRange = 1; | ||||
|             BOOST_ASSERT_MSG(zoom_level < 19, "unsupported zoom level"); | ||||
|             BOOST_ASSERT_MSG(1 < input_geometry.size(), "geometry invalid"); | ||||
|             std::size_t left_border = 0; | ||||
|             std::size_t right_border = 1; | ||||
|             //Sweep linerarily over array and identify those ranges that need to be checked
 | ||||
| //            recursionStack.hint(inputVector.size());
 | ||||
|             do { | ||||
|                 assert(inputVector[leftBorderOfRange].necessary); | ||||
|                 assert(inputVector.back().necessary); | ||||
|                 BOOST_ASSERT_MSG( | ||||
|                     input_geometry[left_border].necessary, | ||||
|                     "left border must be necessary" | ||||
|                 ); | ||||
|                 BOOST_ASSERT_MSG( | ||||
|                     input_geometry.back().necessary, | ||||
|                     "right border must be necessary" | ||||
|                 ); | ||||
| 
 | ||||
|                 if(inputVector[rightBorderOfRange].necessary) { | ||||
|                     recursionStack.push(std::make_pair(leftBorderOfRange, rightBorderOfRange)); | ||||
|                     leftBorderOfRange = rightBorderOfRange; | ||||
|                 if(input_geometry[right_border].necessary) { | ||||
|                     recursion_stack.push(std::make_pair(left_border, right_border)); | ||||
|                     left_border = right_border; | ||||
|                 } | ||||
|                 ++rightBorderOfRange; | ||||
|             } while( rightBorderOfRange < inputVector.size()); | ||||
|                 ++right_border; | ||||
|             } while( right_border < input_geometry.size()); | ||||
|         } | ||||
|         while(!recursionStack.empty()) { | ||||
|         while(!recursion_stack.empty()) { | ||||
|             //pop next element
 | ||||
|             const PairOfPoints pair = recursionStack.top(); | ||||
|             recursionStack.pop(); | ||||
|             assert(inputVector[pair.first].necessary); | ||||
|             assert(inputVector[pair.second].necessary); | ||||
|             assert(pair.second < inputVector.size()); | ||||
|             assert(pair.first < pair.second); | ||||
|             int maxDistance = INT_MIN; | ||||
|             const PairOfPoints pair = recursion_stack.top(); | ||||
|             recursion_stack.pop(); | ||||
|             BOOST_ASSERT_MSG( | ||||
|                 input_geometry[pair.first].necessary, | ||||
|                 "left border mus be necessary" | ||||
|             ); | ||||
|             BOOST_ASSERT_MSG( | ||||
|                 input_geometry[pair.second].necessary, | ||||
|                 "right border must be necessary" | ||||
|             ); | ||||
|             BOOST_ASSERT_MSG( | ||||
|                 pair.second < input_geometry.size(), | ||||
|                 "right border outside of geometry" | ||||
|             ); | ||||
|             BOOST_ASSERT_MSG( | ||||
|                 pair.first < pair.second, | ||||
|                 "left border on the wrong side" | ||||
|             ); | ||||
|             int max_distance = INT_MIN; | ||||
| 
 | ||||
|             std::size_t indexOfFarthestElement = pair.second; | ||||
|             //find index idx of element with maxDistance
 | ||||
|             std::size_t farthest_element_index = pair.second; | ||||
|             //find index idx of element with max_distance
 | ||||
|             for(std::size_t i = pair.first+1; i < pair.second; ++i){ | ||||
|                 const double distance = std::fabs(fastDistance(inputVector[i].location, inputVector[pair.first].location, inputVector[pair.second].location)); | ||||
|                 if(distance > DouglasPeuckerThresholds[zoomLevel] && distance > maxDistance) { | ||||
|                     indexOfFarthestElement = i; | ||||
|                     maxDistance = distance; | ||||
|                 const int temp_dist = fastDistance( | ||||
|                                         input_geometry[i].location, | ||||
|                                         input_geometry[pair.first].location, | ||||
|                                         input_geometry[pair.second].location | ||||
|                                     ); | ||||
|                 const double distance = std::fabs(temp_dist); | ||||
|                 if( | ||||
|                     distance > DouglasPeuckerThresholds[zoom_level] && | ||||
|                     distance > max_distance | ||||
|                 ) { | ||||
|                     farthest_element_index = i; | ||||
|                     max_distance = distance; | ||||
|                 } | ||||
|             } | ||||
|             if (maxDistance > DouglasPeuckerThresholds[zoomLevel]) { | ||||
|             if (max_distance > DouglasPeuckerThresholds[zoom_level]) { | ||||
|                 //  mark idx as necessary
 | ||||
|                 inputVector[indexOfFarthestElement].necessary = true; | ||||
|                 if (1 < indexOfFarthestElement - pair.first) { | ||||
|                     recursionStack.push(std::make_pair(pair.first, indexOfFarthestElement) ); | ||||
|                 input_geometry[farthest_element_index].necessary = true; | ||||
|                 if (1 < (farthest_element_index - pair.first) ) { | ||||
|                     recursion_stack.push( | ||||
|                         std::make_pair(pair.first, farthest_element_index) | ||||
|                     ); | ||||
|                 } | ||||
|                 if (1 < (pair.second - farthest_element_index) ) { | ||||
|                     recursion_stack.push( | ||||
|                         std::make_pair(farthest_element_index, pair.second) | ||||
|                     ); | ||||
|                 } | ||||
|                 if (1 < pair.second - indexOfFarthestElement) | ||||
|                     recursionStack.push(std::make_pair(indexOfFarthestElement, pair.second) ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -1,23 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef ITERATORBASEDCRC32_H_ | ||||
| #define ITERATORBASEDCRC32_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef OBJECTTOBASE64_H_ | ||||
| #define OBJECTTOBASE64_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef POLYLINECOMPRESSOR_H_ | ||||
| #define POLYLINECOMPRESSOR_H_ | ||||
|  | ||||
| @ -1,25 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| Strongly connected components using Tarjan's Algorithm | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
|  */ | ||||
| */ | ||||
| 
 | ||||
| #ifndef STRONGLYCONNECTEDCOMPONENTS_H_ | ||||
| #define STRONGLYCONNECTEDCOMPONENTS_H_ | ||||
| @ -35,11 +39,13 @@ Strongly connected components using Tarjan's Algorithm | ||||
| 
 | ||||
| #include "../Util/SimpleLogger.h" | ||||
| 
 | ||||
| #include <boost/assert.hpp> | ||||
| #include <boost/filesystem.hpp> | ||||
| #include <boost/foreach.hpp> | ||||
| #include <boost/integer.hpp> | ||||
| #include <boost/make_shared.hpp> | ||||
| #include <boost/unordered_map.hpp> | ||||
| #include <boost/unordered_set.hpp> | ||||
| 
 | ||||
| #ifdef __APPLE__ | ||||
|     #include <gdal.h> | ||||
| @ -48,7 +54,7 @@ Strongly connected components using Tarjan's Algorithm | ||||
|     #include <gdal/gdal.h> | ||||
|     #include <gdal/ogrsf_frmts.h> | ||||
| #endif | ||||
| #include <cassert> | ||||
| 
 | ||||
| #include <stack> | ||||
| #include <vector> | ||||
| 
 | ||||
| @ -64,7 +70,6 @@ private: | ||||
| 
 | ||||
|     struct TarjanEdgeData { | ||||
|         int distance; | ||||
|         unsigned edgeBasedNodeID; | ||||
|         unsigned nameID:31; | ||||
|         bool shortcut:1; | ||||
|         short type; | ||||
| @ -77,26 +82,28 @@ private: | ||||
|     }; | ||||
| 
 | ||||
|     struct TarjanStackFrame { | ||||
|         explicit TarjanStackFrame(NodeID _v, NodeID p) : v(_v), parent(p) {} | ||||
|         explicit TarjanStackFrame( | ||||
|             NodeID v, | ||||
|             NodeID parent | ||||
|         ) : v(v), parent(parent) { } | ||||
|         NodeID v; | ||||
|         NodeID parent; | ||||
|     }; | ||||
| 
 | ||||
|     typedef DynamicGraph<TarjanEdgeData> TarjanDynamicGraph; | ||||
|     typedef TarjanDynamicGraph::InputEdge TarjanEdge; | ||||
|     typedef std::pair<NodeID, NodeID> RestrictionSource; | ||||
|     typedef std::pair<NodeID, bool>   RestrictionTarget; | ||||
|     typedef std::vector<RestrictionTarget> EmanatingRestrictionsVector; | ||||
|     typedef DynamicGraph<TarjanEdgeData>        TarjanDynamicGraph; | ||||
|     typedef TarjanDynamicGraph::InputEdge       TarjanEdge; | ||||
|     typedef std::pair<NodeID, NodeID>           RestrictionSource; | ||||
|     typedef std::pair<NodeID, bool>             restriction_target; | ||||
|     typedef std::vector<restriction_target>      EmanatingRestrictionsVector; | ||||
|     typedef boost::unordered_map<RestrictionSource, unsigned > RestrictionMap; | ||||
| 
 | ||||
|     std::vector<NodeInfo>               inputNodeInfoList; | ||||
|     unsigned numberOfTurnRestrictions; | ||||
|     boost::shared_ptr<TarjanDynamicGraph>   _nodeBasedGraph; | ||||
|     boost::unordered_map<NodeID, bool>          _barrierNodes; | ||||
|     boost::unordered_map<NodeID, bool>          _trafficLights; | ||||
| 
 | ||||
|     std::vector<EmanatingRestrictionsVector> _restrictionBucketVector; | ||||
|     RestrictionMap _restrictionMap; | ||||
|     std::vector<NodeInfo>                       m_coordinate_list; | ||||
|     std::vector<EmanatingRestrictionsVector>    m_restriction_bucket_list; | ||||
|     boost::shared_ptr<TarjanDynamicGraph>       m_node_based_graph; | ||||
|     boost::unordered_set<NodeID>                m_barrier_node_list; | ||||
|     boost::unordered_set<NodeID>                m_traffic_light_list; | ||||
|     unsigned                                    m_restriction_counter; | ||||
|     RestrictionMap                              m_restriction_map; | ||||
| 
 | ||||
|     struct EdgeBasedNode { | ||||
|         bool operator<(const EdgeBasedNode & other) const { | ||||
| @ -116,93 +123,99 @@ private: | ||||
|         bool ignoreInGrid:1; | ||||
|     }; | ||||
| 
 | ||||
|     DeallocatingVector<EdgeBasedNode>   edgeBasedNodes; | ||||
| public: | ||||
|     TarjanSCC( | ||||
|         int nodes, | ||||
|         std::vector<NodeBasedEdge> & inputEdges, | ||||
|         int number_of_nodes, | ||||
|         std::vector<NodeBasedEdge> & input_edges, | ||||
|         std::vector<NodeID> & bn, | ||||
|         std::vector<NodeID> & tl, | ||||
|         std::vector<TurnRestriction> & irs, | ||||
|         std::vector<NodeInfo> & nI | ||||
|     ) : | ||||
|         inputNodeInfoList(nI), | ||||
|         numberOfTurnRestrictions(irs.size()) | ||||
|         m_coordinate_list(nI), | ||||
|         m_restriction_counter(irs.size()) | ||||
|     { | ||||
|         BOOST_FOREACH(const TurnRestriction & restriction, irs) { | ||||
|             std::pair<NodeID, NodeID> restrictionSource = std::make_pair( | ||||
|                 restriction.fromNode, restriction.viaNode | ||||
|             ); | ||||
|             unsigned index; | ||||
|             RestrictionMap::iterator restrIter = _restrictionMap.find(restrictionSource); | ||||
|             if(restrIter == _restrictionMap.end()) { | ||||
|                 index = _restrictionBucketVector.size(); | ||||
|                 _restrictionBucketVector.resize(index+1); | ||||
|                 _restrictionMap[restrictionSource] = index; | ||||
|             RestrictionMap::iterator restriction_iterator = m_restriction_map.find(restrictionSource); | ||||
|             if(restriction_iterator == m_restriction_map.end()) { | ||||
|                 index = m_restriction_bucket_list.size(); | ||||
|                 m_restriction_bucket_list.resize(index+1); | ||||
|                 m_restriction_map[restrictionSource] = index; | ||||
|             } else { | ||||
|                 index = restrIter->second; | ||||
|                 index = restriction_iterator->second; | ||||
|                 //Map already contains an is_only_*-restriction
 | ||||
|                 if(_restrictionBucketVector.at(index).begin()->second) | ||||
|                 if(m_restriction_bucket_list.at(index).begin()->second) { | ||||
|                     continue; | ||||
|                 else if(restriction.flags.isOnly){ | ||||
|                 } else if(restriction.flags.isOnly) { | ||||
|                     //We are going to insert an is_only_*-restriction. There can be only one.
 | ||||
|                     _restrictionBucketVector.at(index).clear(); | ||||
|                     m_restriction_bucket_list.at(index).clear(); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             _restrictionBucketVector.at(index).push_back( | ||||
|             m_restriction_bucket_list.at(index).push_back( | ||||
|                 std::make_pair(restriction.toNode, restriction.flags.isOnly) | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         BOOST_FOREACH(NodeID id, bn) { | ||||
|             _barrierNodes[id] = true; | ||||
|         } | ||||
|         BOOST_FOREACH(NodeID id, tl) { | ||||
|             _trafficLights[id] = true; | ||||
|         } | ||||
| 
 | ||||
|         DeallocatingVector< TarjanEdge > edges; | ||||
|         for ( std::vector< NodeBasedEdge >::const_iterator i = inputEdges.begin(); i != inputEdges.end(); ++i ) { | ||||
|         m_barrier_node_list.insert(bn.begin(), bn.end()); | ||||
|         m_traffic_light_list.insert(tl.begin(), tl.end()); | ||||
| 
 | ||||
|         DeallocatingVector< TarjanEdge > edge_list; | ||||
|         BOOST_FOREACH(const NodeBasedEdge & input_edge, input_edges) { | ||||
|             TarjanEdge edge; | ||||
|             if(!i->isForward()) { | ||||
|                 edge.source = i->target(); | ||||
|                 edge.target = i->source(); | ||||
|                 edge.data.backward = i->isForward(); | ||||
|                 edge.data.forward = i->isBackward(); | ||||
|             if(!input_edge.isForward()) { | ||||
|                 edge.source = input_edge.target(); | ||||
|                 edge.target = input_edge.source(); | ||||
|                 edge.data.backward = input_edge.isForward(); | ||||
|                 edge.data.forward = input_edge.isBackward(); | ||||
|             } else { | ||||
|                 edge.source = i->source(); | ||||
|                 edge.target = i->target(); | ||||
|                 edge.data.forward = i->isForward(); | ||||
|                 edge.data.backward = i->isBackward(); | ||||
|                 edge.source = input_edge.source(); | ||||
|                 edge.target = input_edge.target(); | ||||
|                 edge.data.forward = input_edge.isForward(); | ||||
|                 edge.data.backward = input_edge.isBackward(); | ||||
|             } | ||||
|             if(edge.source == edge.target) | ||||
|             if(edge.source == edge.target) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             edge.data.distance = (std::max)((int)i->weight(), 1 ); | ||||
|             assert( edge.data.distance > 0 ); | ||||
|             edge.data.distance = (std::max)((int)input_edge.weight(), 1 ); | ||||
|             BOOST_ASSERT( edge.data.distance > 0 ); | ||||
|             edge.data.shortcut = false; | ||||
|             edge.data.roundabout = i->isRoundabout(); | ||||
|             edge.data.ignoreInGrid = i->ignoreInGrid(); | ||||
|             edge.data.nameID = i->name(); | ||||
|             edge.data.type = i->type(); | ||||
|             edge.data.isAccessRestricted = i->isAccessRestricted(); | ||||
|             edge.data.edgeBasedNodeID = edges.size(); | ||||
|             edge.data.roundabout = input_edge.isRoundabout(); | ||||
|             edge.data.ignoreInGrid = input_edge.ignoreInGrid(); | ||||
|             edge.data.nameID = input_edge.name(); | ||||
|             edge.data.type = input_edge.type(); | ||||
|             edge.data.isAccessRestricted = input_edge.isAccessRestricted(); | ||||
|             edge.data.reversedEdge = false; | ||||
|             edges.push_back( edge ); | ||||
|             edge_list.push_back( edge ); | ||||
|             if( edge.data.backward ) { | ||||
|                 std::swap( edge.source, edge.target ); | ||||
|                 edge.data.forward = i->isBackward(); | ||||
|                 edge.data.backward = i->isForward(); | ||||
|                 edge.data.edgeBasedNodeID = edges.size(); | ||||
|                 edge.data.forward = input_edge.isBackward(); | ||||
|                 edge.data.backward = input_edge.isForward(); | ||||
|                 edge.data.reversedEdge = true; | ||||
|                 edges.push_back( edge ); | ||||
|                 edge_list.push_back( edge ); | ||||
|             } | ||||
|         } | ||||
|         std::vector<NodeBasedEdge>().swap(inputEdges); | ||||
|         std::sort( edges.begin(), edges.end() ); | ||||
|         _nodeBasedGraph = boost::make_shared<TarjanDynamicGraph>( nodes, edges ); | ||||
|         std::vector<NodeBasedEdge>().swap(input_edges); | ||||
|         BOOST_ASSERT_MSG( | ||||
|             0 == input_edges.size() && 0 == input_edges.capacity(), | ||||
|             "input edge vector not properly deallocated" | ||||
|         ); | ||||
| 
 | ||||
|         std::sort( edge_list.begin(), edge_list.end() ); | ||||
| 
 | ||||
|         m_node_based_graph = boost::make_shared<TarjanDynamicGraph>( | ||||
|             number_of_nodes, | ||||
|             edge_list | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     ~TarjanSCC() { | ||||
|         m_node_based_graph.reset(); | ||||
|     } | ||||
| 
 | ||||
|     void Run() { | ||||
| @ -211,162 +224,203 @@ public: | ||||
|         DeleteFileIfExists("component.shx"); | ||||
|         DeleteFileIfExists("component.shp"); | ||||
| 
 | ||||
|         Percent p(_nodeBasedGraph->GetNumberOfNodes()); | ||||
| 
 | ||||
|         const char *pszDriverName = "ESRI Shapefile"; | ||||
|         OGRSFDriver *poDriver; | ||||
|         Percent p(m_node_based_graph->GetNumberOfNodes()); | ||||
| 
 | ||||
|         OGRRegisterAll(); | ||||
| 
 | ||||
|         poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName( | ||||
|                 pszDriverName ); | ||||
|         if( poDriver == NULL ) | ||||
|         { | ||||
|             printf( "%s driver not available.\n", pszDriverName ); | ||||
|             exit( 1 ); | ||||
|         const char *pszDriverName = "ESRI Shapefile"; | ||||
|         OGRSFDriver * poDriver = OGRSFDriverRegistrar::GetRegistrar()-> | ||||
|             GetDriverByName( pszDriverName ); | ||||
|         if( NULL == poDriver ) { | ||||
|             throw OSRMException("ESRI Shapefile driver not available"); | ||||
|         } | ||||
|         OGRDataSource *poDS; | ||||
|         OGRDataSource * poDS = poDriver->CreateDataSource( | ||||
|             "component.shp", | ||||
|             NULL | ||||
|         ); | ||||
| 
 | ||||
|         poDS = poDriver->CreateDataSource( "component.shp", NULL ); | ||||
|         if( poDS == NULL ) { | ||||
|             printf( "Creation of output file failed.\n" ); | ||||
|             exit( 1 ); | ||||
|         if( NULL == poDS ) { | ||||
|             throw OSRMException("Creation of output file failed"); | ||||
|         } | ||||
| 
 | ||||
|         OGRLayer *poLayer; | ||||
|         OGRLayer * poLayer = poDS->CreateLayer( | ||||
|             "component", | ||||
|             NULL, | ||||
|             wkbLineString, | ||||
|             NULL | ||||
|         ); | ||||
| 
 | ||||
|         poLayer = poDS->CreateLayer( "component", NULL, wkbLineString, NULL ); | ||||
|         if( poLayer == NULL ) { | ||||
|             printf( "Layer creation failed.\n" ); | ||||
|             exit( 1 ); | ||||
|         if( NULL == poLayer ) { | ||||
|             throw OSRMException("Layer creation failed."); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         //The following is a hack to distinguish between stuff that happens before the recursive call and stuff that happens after
 | ||||
|         std::stack<std::pair<bool, TarjanStackFrame> > recursionStack; //true = stuff before, false = stuff after call
 | ||||
|         std::stack<NodeID> tarjanStack; | ||||
|         std::vector<unsigned> componentsIndex(_nodeBasedGraph->GetNumberOfNodes(), UINT_MAX); | ||||
|         std::vector<NodeID> vectorOfComponentSizes; | ||||
|         std::vector<TarjanNode> tarjanNodes(_nodeBasedGraph->GetNumberOfNodes()); | ||||
|         unsigned currentComponent = 0, sizeOfCurrentComponent = 0; | ||||
|         //The following is a hack to distinguish between stuff that happens
 | ||||
|         //before the recursive call and stuff that happens after
 | ||||
|         std::stack<std::pair<bool, TarjanStackFrame> > recursion_stack; | ||||
|         //true = stuff before, false = stuff after call
 | ||||
|         std::stack<NodeID> tarjan_stack; | ||||
|         std::vector<unsigned> components_index( | ||||
|             m_node_based_graph->GetNumberOfNodes(), | ||||
|             UINT_MAX | ||||
|         ); | ||||
|         std::vector<NodeID> component_size_vector; | ||||
|         std::vector<TarjanNode> tarjan_node_list( | ||||
|             m_node_based_graph->GetNumberOfNodes() | ||||
|         ); | ||||
|         unsigned component_index = 0, size_of_current_component = 0; | ||||
|         int index = 0; | ||||
|         for(NodeID node = 0, endNodes = _nodeBasedGraph->GetNumberOfNodes(); node < endNodes; ++node) { | ||||
|             if(UINT_MAX == componentsIndex[node]) { | ||||
|                 recursionStack.push(std::make_pair(true, TarjanStackFrame(node,node)) ); | ||||
|         for( | ||||
|             NodeID node = 0, last_node = m_node_based_graph->GetNumberOfNodes(); | ||||
|             node < last_node; | ||||
|             ++node | ||||
|         ) { | ||||
|             if(UINT_MAX == components_index[node]) { | ||||
|                 recursion_stack.push( | ||||
|                     std::make_pair(true, TarjanStackFrame(node,node)) | ||||
|                 ); | ||||
|             } | ||||
| 
 | ||||
|             while(!recursionStack.empty()) { | ||||
|                 bool beforeRecursion = recursionStack.top().first; | ||||
|                 TarjanStackFrame currentFrame = recursionStack.top().second; | ||||
|             while(!recursion_stack.empty()) { | ||||
|                 bool before_recursion = recursion_stack.top().first; | ||||
|                 TarjanStackFrame currentFrame = recursion_stack.top().second; | ||||
|                 NodeID v = currentFrame.v; | ||||
| //                SimpleLogger().Write() << "popping node " << v << (beforeRecursion ? " before " : " after ") << "recursion";
 | ||||
|                 recursionStack.pop(); | ||||
|                 recursion_stack.pop(); | ||||
| 
 | ||||
|                 if(beforeRecursion) { | ||||
|                 if(before_recursion) { | ||||
|                     //Mark frame to handle tail of recursion
 | ||||
|                     recursionStack.push(std::make_pair(false, currentFrame)); | ||||
|                     recursion_stack.push(std::make_pair(false, currentFrame)); | ||||
| 
 | ||||
|                     //Mark essential information for SCC
 | ||||
|                     tarjanNodes[v].index = index; | ||||
|                     tarjanNodes[v].lowlink = index; | ||||
|                     tarjanStack.push(v); | ||||
|                     tarjanNodes[v].onStack = true; | ||||
|                     tarjan_node_list[v].index = index; | ||||
|                     tarjan_node_list[v].lowlink = index; | ||||
|                     tarjan_stack.push(v); | ||||
|                     tarjan_node_list[v].onStack = true; | ||||
|                     ++index; | ||||
| //                    SimpleLogger().Write() << "pushing " << v << " onto tarjan stack, idx[" << v << "]=" << tarjanNodes[v].index << ", lowlink["<< v << "]=" << tarjanNodes[v].lowlink;
 | ||||
| 
 | ||||
|                     //Traverse outgoing edges
 | ||||
|                     for(TarjanDynamicGraph::EdgeIterator e2 = _nodeBasedGraph->BeginEdges(v); e2 < _nodeBasedGraph->EndEdges(v); ++e2) { | ||||
|                         TarjanDynamicGraph::NodeIterator vprime = _nodeBasedGraph->GetTarget(e2); | ||||
| //                        SimpleLogger().Write() << "traversing edge (" << v << "," << vprime << ")";
 | ||||
|                         if(UINT_MAX == tarjanNodes[vprime].index) { | ||||
| 
 | ||||
|                             recursionStack.push(std::make_pair(true,TarjanStackFrame(vprime, v))); | ||||
|                     for( | ||||
|                         TarjanDynamicGraph::EdgeIterator e2 = m_node_based_graph->BeginEdges(v); | ||||
|                         e2 < m_node_based_graph->EndEdges(v); | ||||
|                         ++e2 | ||||
|                     ) { | ||||
|                         const TarjanDynamicGraph::NodeIterator vprime = | ||||
|                             m_node_based_graph->GetTarget(e2); | ||||
|                         if(UINT_MAX == tarjan_node_list[vprime].index) { | ||||
|                             recursion_stack.push( | ||||
|                                 std::make_pair( | ||||
|                                     true, | ||||
|                                     TarjanStackFrame(vprime, v) | ||||
|                                 ) | ||||
|                             ); | ||||
|                         } else { | ||||
| //                            SimpleLogger().Write() << "Node " << vprime << " is already explored";
 | ||||
|                             if(tarjanNodes[vprime].onStack) { | ||||
|                                 unsigned newLowlink = std::min(tarjanNodes[v].lowlink, tarjanNodes[vprime].index); | ||||
| //                                SimpleLogger().Write() << "Setting lowlink[" << v << "] from " << tarjanNodes[v].lowlink << " to " << newLowlink;
 | ||||
|                                 tarjanNodes[v].lowlink = newLowlink; | ||||
| //                            } else {
 | ||||
| //                                SimpleLogger().Write() << "But node " << vprime << " is not on stack";
 | ||||
|                             if( | ||||
|                                 tarjan_node_list[vprime].onStack && | ||||
|                                 tarjan_node_list[vprime].index < tarjan_node_list[v].lowlink | ||||
|                             ) { | ||||
|                                 tarjan_node_list[v].lowlink = tarjan_node_list[vprime].index; | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } else { | ||||
| 
 | ||||
| //                    SimpleLogger().Write() << "we are at the end of recursion and checking node " << v;
 | ||||
|                     { // setting lowlink in its own scope so it does not pollute namespace
 | ||||
|                         //                        NodeID parent = (UINT_MAX == tarjanNodes[v].parent ? v : tarjanNodes[v].parent );
 | ||||
| //                        SimpleLogger().Write() << "parent=" << currentFrame.parent;
 | ||||
| //                        SimpleLogger().Write() << "tarjanNodes[" << v  << "].lowlink=" << tarjanNodes[v].lowlink << ", tarjanNodes[" << currentFrame.parent << "].lowlink=" << tarjanNodes[currentFrame.parent].lowlink;
 | ||||
|                         //Note the index shift by 1 compared to the recursive version
 | ||||
|                         tarjanNodes[currentFrame.parent].lowlink = std::min(tarjanNodes[currentFrame.parent].lowlink, tarjanNodes[v].lowlink); | ||||
| //                        SimpleLogger().Write() << "Setting tarjanNodes[" << currentFrame.parent  <<"].lowlink=" << tarjanNodes[currentFrame.parent].lowlink;
 | ||||
|                     } | ||||
| //                    SimpleLogger().Write() << "tarjanNodes[" << v  << "].lowlink=" << tarjanNodes[v].lowlink << ", tarjanNodes[" << v  << "].index=" << tarjanNodes[v].index;
 | ||||
| 
 | ||||
|                     tarjan_node_list[currentFrame.parent].lowlink = | ||||
|                         std::min( | ||||
|                             tarjan_node_list[currentFrame.parent].lowlink, | ||||
|                             tarjan_node_list[v].lowlink | ||||
|                         ); | ||||
|                     //after recursion, lets do cycle checking
 | ||||
|                     //Check if we found a cycle. This is the bottom part of the recursion
 | ||||
|                     if(tarjanNodes[v].lowlink == tarjanNodes[v].index) { | ||||
|                     if(tarjan_node_list[v].lowlink == tarjan_node_list[v].index) { | ||||
|                         NodeID vprime; | ||||
|                         do { | ||||
| //                            SimpleLogger().Write() << "identified component " << currentComponent << ": " << tarjanStack.top();
 | ||||
|                             vprime = tarjanStack.top(); tarjanStack.pop(); | ||||
|                             tarjanNodes[vprime].onStack = false; | ||||
|                             componentsIndex[vprime] = currentComponent; | ||||
|                             ++sizeOfCurrentComponent; | ||||
|                             vprime = tarjan_stack.top(); tarjan_stack.pop(); | ||||
|                             tarjan_node_list[vprime].onStack = false; | ||||
|                             components_index[vprime] = component_index; | ||||
|                             ++size_of_current_component; | ||||
|                         } while( v != vprime); | ||||
|                         vectorOfComponentSizes.push_back(sizeOfCurrentComponent); | ||||
|                         if(sizeOfCurrentComponent > 1000) | ||||
|                             SimpleLogger().Write() << "large component [" << currentComponent << "]=" << sizeOfCurrentComponent; | ||||
|                         ++currentComponent; | ||||
|                         sizeOfCurrentComponent = 0; | ||||
| 
 | ||||
|                         component_size_vector.push_back(size_of_current_component); | ||||
| 
 | ||||
|                         if(size_of_current_component > 1000) { | ||||
|                             SimpleLogger().Write() << | ||||
|                             "large component [" << component_index << "]=" << | ||||
|                             size_of_current_component; | ||||
|                         } | ||||
| 
 | ||||
|                         ++component_index; | ||||
|                         size_of_current_component = 0; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         SimpleLogger().Write() << "identified: " << vectorOfComponentSizes.size() << " many components, marking small components"; | ||||
|         SimpleLogger().Write() << | ||||
|             "identified: " << component_size_vector.size() << | ||||
|             " many components, marking small components"; | ||||
| 
 | ||||
|         int singleCounter = 0; | ||||
|         for(unsigned i = 0; i < vectorOfComponentSizes.size(); ++i){ | ||||
|             if(1 == vectorOfComponentSizes[i]) | ||||
|                 ++singleCounter; | ||||
|         unsigned size_one_counter = 0; | ||||
|         for(unsigned i = 0, end = component_size_vector.size(); i < end; ++i){ | ||||
|             if(1 == component_size_vector[i]) { | ||||
|                 ++size_one_counter; | ||||
|             } | ||||
|         } | ||||
|         SimpleLogger().Write() << "identified " << singleCounter << " SCCs of size 1"; | ||||
| 
 | ||||
|         SimpleLogger().Write() << | ||||
|             "identified " << size_one_counter << " SCCs of size 1"; | ||||
| 
 | ||||
|         uint64_t total_network_distance = 0; | ||||
|         p.reinit(_nodeBasedGraph->GetNumberOfNodes()); | ||||
|         for(TarjanDynamicGraph::NodeIterator u = 0; u < _nodeBasedGraph->GetNumberOfNodes(); ++u ) { | ||||
|         p.reinit(m_node_based_graph->GetNumberOfNodes()); | ||||
|         for( | ||||
|             TarjanDynamicGraph::NodeIterator u = 0, last_u_node = m_node_based_graph->GetNumberOfNodes(); | ||||
|             u < last_u_node; | ||||
|             ++u | ||||
|          ) { | ||||
|             p.printIncrement(); | ||||
|             for(TarjanDynamicGraph::EdgeIterator e1 = _nodeBasedGraph->BeginEdges(u); e1 < _nodeBasedGraph->EndEdges(u); ++e1) { | ||||
|                 if(_nodeBasedGraph->GetEdgeData(e1).reversedEdge) { | ||||
|             for( | ||||
|                 TarjanDynamicGraph::EdgeIterator e1 = m_node_based_graph->BeginEdges(u), last_edge = m_node_based_graph->EndEdges(u); | ||||
|                 e1 < last_edge; | ||||
|                 ++e1 | ||||
|             ) { | ||||
|                 if(!m_node_based_graph->GetEdgeData(e1).reversedEdge) { | ||||
|                     continue; | ||||
|                 } | ||||
|                 TarjanDynamicGraph::NodeIterator v = _nodeBasedGraph->GetTarget(e1); | ||||
|                 const TarjanDynamicGraph::NodeIterator v = m_node_based_graph->GetTarget(e1); | ||||
| 
 | ||||
|                 total_network_distance += 100*ApproximateDistance( | ||||
|                         inputNodeInfoList[u].lat, | ||||
|                         inputNodeInfoList[u].lon, | ||||
|                         inputNodeInfoList[v].lat, | ||||
|                         inputNodeInfoList[v].lon | ||||
|                         m_coordinate_list[u].lat, | ||||
|                         m_coordinate_list[u].lon, | ||||
|                         m_coordinate_list[v].lat, | ||||
|                         m_coordinate_list[v].lon | ||||
|                 ); | ||||
| 
 | ||||
|                 if(_nodeBasedGraph->GetEdgeData(e1).type != SHRT_MAX) { | ||||
|                     assert(e1 != UINT_MAX); | ||||
|                     assert(u != UINT_MAX); | ||||
|                     assert(v != UINT_MAX); | ||||
|                 if( SHRT_MAX != m_node_based_graph->GetEdgeData(e1).type ) { | ||||
|                     BOOST_ASSERT(e1 != UINT_MAX); | ||||
|                     BOOST_ASSERT(u != UINT_MAX); | ||||
|                     BOOST_ASSERT(v != UINT_MAX); | ||||
| 
 | ||||
|                     const unsigned size_of_containing_component = | ||||
|                         std::min( | ||||
|                             component_size_vector[components_index[u]], | ||||
|                             component_size_vector[components_index[v]] | ||||
|                         ); | ||||
| 
 | ||||
|                     //edges that end on bollard nodes may actually be in two distinct components
 | ||||
|                     if(std::min(vectorOfComponentSizes[componentsIndex[u]], vectorOfComponentSizes[componentsIndex[v]]) < 10) { | ||||
| 
 | ||||
|                         //INFO("(" << inputNodeInfoList[u].lat/COORDINATE_PRECISION << ";" << inputNodeInfoList[u].lon/COORDINATE_PRECISION << ") -> (" << inputNodeInfoList[v].lat/COORDINATE_PRECISION << ";" << inputNodeInfoList[v].lon/COORDINATE_PRECISION << ")");
 | ||||
|                     if(size_of_containing_component < 10) { | ||||
|                         OGRLineString lineString; | ||||
|                         lineString.addPoint(inputNodeInfoList[u].lon/COORDINATE_PRECISION, inputNodeInfoList[u].lat/COORDINATE_PRECISION); | ||||
|                         lineString.addPoint(inputNodeInfoList[v].lon/COORDINATE_PRECISION, inputNodeInfoList[v].lat/COORDINATE_PRECISION); | ||||
|                         OGRFeature *poFeature; | ||||
|                         poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() ); | ||||
|                         lineString.addPoint( | ||||
|                             m_coordinate_list[u].lon/COORDINATE_PRECISION, | ||||
|                             m_coordinate_list[u].lat/COORDINATE_PRECISION | ||||
|                         ); | ||||
|                         lineString.addPoint( | ||||
|                             m_coordinate_list[v].lon/COORDINATE_PRECISION, | ||||
|                             m_coordinate_list[v].lat/COORDINATE_PRECISION | ||||
|                         ); | ||||
| 
 | ||||
|                         OGRFeature * poFeature = OGRFeature::CreateFeature( | ||||
|                             poLayer->GetLayerDefn() | ||||
|                         ); | ||||
| 
 | ||||
|                         poFeature->SetGeometry( &lineString ); | ||||
|                         if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) { | ||||
|                         if( OGRERR_NONE != poLayer->CreateFeature(poFeature) ) { | ||||
|                             throw OSRMException( | ||||
|                                 "Failed to create feature in shapefile." | ||||
|                             ); | ||||
| @ -377,39 +431,66 @@ public: | ||||
|             } | ||||
|         } | ||||
|         OGRDataSource::DestroyDataSource( poDS ); | ||||
|         std::vector<NodeID>().swap(vectorOfComponentSizes); | ||||
|         std::vector<NodeID>().swap(componentsIndex); | ||||
|         SimpleLogger().Write() << "total network distance: " << (uint64_t)total_network_distance/100/1000. << " km"; | ||||
|         std::vector<NodeID>().swap(component_size_vector); | ||||
|         BOOST_ASSERT_MSG( | ||||
|             0 == component_size_vector.size() && | ||||
|             0 == component_size_vector.capacity(), | ||||
|             "component_size_vector not properly deallocated" | ||||
|         ); | ||||
| 
 | ||||
|         std::vector<NodeID>().swap(components_index); | ||||
|         BOOST_ASSERT_MSG( | ||||
|             0 == components_index.size() && 0 == components_index.capacity(), | ||||
|             "icomponents_index not properly deallocated" | ||||
|         ); | ||||
| 
 | ||||
|         SimpleLogger().Write() | ||||
|             << "total network distance: " << | ||||
|              (uint64_t)total_network_distance/100/1000. << | ||||
|             " km"; | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     unsigned CheckForEmanatingIsOnlyTurn(const NodeID u, const NodeID v) const { | ||||
|         std::pair < NodeID, NodeID > restrictionSource = std::make_pair(u, v); | ||||
|         RestrictionMap::const_iterator restrIter = _restrictionMap.find(restrictionSource); | ||||
|         if (restrIter != _restrictionMap.end()) { | ||||
|             unsigned index = restrIter->second; | ||||
|             BOOST_FOREACH(RestrictionSource restrictionTarget, _restrictionBucketVector.at(index)) { | ||||
|                 if(restrictionTarget.second) { | ||||
|                     return restrictionTarget.first; | ||||
|         std::pair < NodeID, NodeID > restriction_source = std::make_pair(u, v); | ||||
|         RestrictionMap::const_iterator restriction_iterator = m_restriction_map.find(restriction_source); | ||||
|         if (restriction_iterator != m_restriction_map.end()) { | ||||
|             const unsigned index = restriction_iterator->second; | ||||
|             BOOST_FOREACH( | ||||
|                 const RestrictionSource & restriction_target, | ||||
|                 m_restriction_bucket_list.at(index) | ||||
|             ) { | ||||
|                 if(restriction_target.second) { | ||||
|                     return restriction_target.first; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return UINT_MAX; | ||||
|     } | ||||
|     bool CheckIfTurnIsRestricted(const NodeID u, const NodeID v, const NodeID w) const { | ||||
| 
 | ||||
|     bool CheckIfTurnIsRestricted( | ||||
|         const NodeID u, | ||||
|         const NodeID v, | ||||
|         const NodeID w | ||||
|     ) const { | ||||
|         //only add an edge if turn is not a U-turn except it is the end of dead-end street.
 | ||||
|         std::pair < NodeID, NodeID > restrictionSource = std::make_pair(u, v); | ||||
|         RestrictionMap::const_iterator restrIter = _restrictionMap.find(restrictionSource); | ||||
|         if (restrIter != _restrictionMap.end()) { | ||||
|             unsigned index = restrIter->second; | ||||
|             BOOST_FOREACH(RestrictionTarget restrictionTarget, _restrictionBucketVector.at(index)) { | ||||
|                 if(w == restrictionTarget.first) | ||||
|         std::pair < NodeID, NodeID > restriction_source = std::make_pair(u, v); | ||||
|         RestrictionMap::const_iterator restriction_iterator = m_restriction_map.find(restriction_source); | ||||
|         if (restriction_iterator != m_restriction_map.end()) { | ||||
|             const unsigned index = restriction_iterator->second; | ||||
|             BOOST_FOREACH( | ||||
|                 const restriction_target & restriction_target, | ||||
|                 m_restriction_bucket_list.at(index) | ||||
|             ) { | ||||
|                 if(w == restriction_target.first) { | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     void DeleteFileIfExists(const std::string file_name) const { | ||||
|     void DeleteFileIfExists(const std::string & file_name) const { | ||||
|         if (boost::filesystem::exists(file_name) ) { | ||||
|             boost::filesystem::remove(file_name); | ||||
|         } | ||||
|  | ||||
| @ -2,6 +2,11 @@ cmake_minimum_required(VERSION 2.6) | ||||
| set(CMAKE_EXPORT_COMPILE_COMMANDS ON) | ||||
| project(OSRM) | ||||
| include(FindPackageHandleStandardArgs) | ||||
| set(HUGO "${CMAKE_CURRENT_SOURCE_DIR}") | ||||
| 
 | ||||
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") | ||||
| include(GetGitRevisionDescription) | ||||
| git_describe(GIT_DESCRIPTION) | ||||
| 
 | ||||
| TRY_RUN(SHARED_LIBRARY_PATH_TYPE SHARED_LIBRARY_PATH_INFO_COMPILED ${PROJECT_BINARY_DIR}/CMakeTmp ${PROJECT_SOURCE_DIR}/cmake/size.cpp OUTPUT_VARIABLE IS_64_SYSTEM) | ||||
| if(IS_64_SYSTEM) | ||||
| @ -15,8 +20,8 @@ endif(IS_64_SYSTEM) | ||||
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) | ||||
| 
 | ||||
| add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/UUID.cpp UUID.cpp.alwaysbuild | ||||
|   COMMAND ${CMAKE_COMMAND} -P | ||||
|     ${CMAKE_SOURCE_DIR}/cmake/UUID-Config.cmake | ||||
|   COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} | ||||
|     -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UUID-Config.cmake | ||||
|   DEPENDS | ||||
|     ${CMAKE_SOURCE_DIR}/Util/UUID.cpp.in | ||||
|   	${CMAKE_SOURCE_DIR}/cmake/UUID-Config.cmake | ||||
| @ -25,17 +30,18 @@ add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/UUID.cpp UUID.cpp.alwaysbuild | ||||
| 
 | ||||
| add_custom_target(UUIDConfigure DEPENDS ${CMAKE_SOURCE_DIR}/Util/UUID.cpp ) | ||||
| 
 | ||||
| set(BOOST_COMPONENTS filesystem regex system thread) | ||||
| set(BOOST_COMPONENTS filesystem program_options regex system thread) | ||||
| 
 | ||||
| configure_file(Util/GitDescription.cpp.in ${CMAKE_SOURCE_DIR}/Util/GitDescription.cpp) | ||||
| file(GLOB ExtractorGlob Extractor/*.cpp) | ||||
| set(ExtractorSources extractor.cpp ${ExtractorGlob}) | ||||
| set(ExtractorSources extractor.cpp ${ExtractorGlob} Util/GitDescription.cpp) | ||||
| add_executable(osrm-extract ${ExtractorSources} ) | ||||
| 
 | ||||
| file(GLOB PrepareGlob Contractor/*.cpp) | ||||
| set(PrepareSources createHierarchy.cpp ${PrepareGlob}) | ||||
| set(PrepareSources createHierarchy.cpp ${PrepareGlob} Util/GitDescription.cpp) | ||||
| add_executable(osrm-prepare ${PrepareSources} ) | ||||
| 
 | ||||
| add_executable(osrm-routed routed.cpp ) | ||||
| add_executable(osrm-routed routed.cpp Util/GitDescription.cpp) | ||||
| set_target_properties(osrm-routed PROPERTIES COMPILE_FLAGS -DROUTED) | ||||
| 
 | ||||
| file(GLOB DescriptorGlob Descriptors/*.cpp) | ||||
| @ -155,6 +161,8 @@ if(WITH_TOOLS) | ||||
| 			osrm-components ${GDAL_LIBRARIES} ${Boost_LIBRARIES} UUID | ||||
| 		) | ||||
| 	endif(GDAL_FOUND) | ||||
| 	add_executable ( osrm-cli Tools/simpleclient.cpp ) | ||||
| 	add_executable ( osrm-cli Tools/simpleclient.cpp Util/GitDescription.cpp) | ||||
| 	target_link_libraries( osrm-cli ${Boost_LIBRARIES} OSRM UUID ) | ||||
|     add_executable ( osrm-io-benchmark Tools/io-benchmark.cpp ) | ||||
|     target_link_libraries( osrm-io-benchmark ${Boost_LIBRARIES} ) | ||||
| endif(WITH_TOOLS) | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef CONTRACTOR_H_INCLUDED | ||||
| #define CONTRACTOR_H_INCLUDED | ||||
| @ -38,7 +45,6 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include <boost/make_shared.hpp> | ||||
| #include <boost/shared_ptr.hpp> | ||||
| 
 | ||||
| #include <cfloat> | ||||
| #include <ctime> | ||||
| 
 | ||||
| #include <algorithm> | ||||
| @ -732,7 +738,7 @@ private: | ||||
|             if ( priority > targetPriority ) | ||||
|                 return false; | ||||
|             //tie breaking
 | ||||
|             if ( fabs(priority - targetPriority) < FLT_EPSILON && bias(node, target) ) { | ||||
|             if ( fabs(priority - targetPriority) < std::numeric_limits<double>::epsilon() && bias(node, target) ) { | ||||
|                 return false; | ||||
|             } | ||||
|             neighbours.push_back( target ); | ||||
| @ -754,7 +760,7 @@ private: | ||||
|                 if ( priority > targetPriority) | ||||
|                     return false; | ||||
|                 //tie breaking
 | ||||
|                 if ( fabs(priority - targetPriority) < FLT_EPSILON && bias(node, target) ) { | ||||
|                 if ( fabs(priority - targetPriority) < std::numeric_limits<double>::epsilon() && bias(node, target) ) { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "EdgeBasedGraphFactory.h" | ||||
| 
 | ||||
| @ -40,7 +47,7 @@ EdgeBasedGraphFactory::EdgeBasedGraphFactory( | ||||
|         if(restriction_iter == m_restriction_map.end()) { | ||||
|             index = m_restriction_bucket_list.size(); | ||||
|             m_restriction_bucket_list.resize(index+1); | ||||
|             m_restriction_map[restriction_source] = index; | ||||
|             m_restriction_map.emplace(restriction_source, index); | ||||
|         } else { | ||||
|             index = restriction_iter->second; | ||||
|             //Map already contains an is_only_*-restriction
 | ||||
| @ -292,6 +299,8 @@ void EdgeBasedGraphFactory::Run( | ||||
|     } | ||||
|     SimpleLogger().Write() << | ||||
|         "identified: " << component_size_list.size() << " many components"; | ||||
|     SimpleLogger().Write() << | ||||
|         "generating edge-expanded nodes"; | ||||
| 
 | ||||
|     p.reinit(m_node_based_graph->GetNumberOfNodes()); | ||||
|     //loop over all edges and generate new set of nodes.
 | ||||
| @ -301,6 +310,7 @@ void EdgeBasedGraphFactory::Run( | ||||
|         u < number_of_nodes; | ||||
|         ++u | ||||
|      ) { | ||||
|         p.printIncrement(); | ||||
|         for( | ||||
|             EdgeIterator e1 = m_node_based_graph->BeginEdges(u), | ||||
|                 last_edge = m_node_based_graph->EndEdges(u); | ||||
| @ -325,6 +335,12 @@ void EdgeBasedGraphFactory::Run( | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     SimpleLogger().Write() | ||||
|         << "Generated " << m_edge_based_node_list.size() << " nodes in " << | ||||
|         "edge-expanded graph"; | ||||
|     SimpleLogger().Write() << | ||||
|         "generating edge-expanded edges"; | ||||
| 
 | ||||
|     std::vector<NodeID>().swap(component_size_list); | ||||
|     BOOST_ASSERT_MSG( | ||||
|         0 == component_size_list.capacity(), | ||||
| @ -341,6 +357,7 @@ void EdgeBasedGraphFactory::Run( | ||||
|     //Loop over all turns and generate new set of edges.
 | ||||
|     //Three nested loop look super-linear, but we are dealing with a (kind of)
 | ||||
|     //linear number of turns only.
 | ||||
|     p.reinit(m_node_based_graph->GetNumberOfNodes()); | ||||
|     for( | ||||
|         NodeIterator u = 0, | ||||
|             last_node = m_node_based_graph->GetNumberOfNodes(); | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| //  This class constructs the edge-expanded routing graph
 | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "TemporaryStorage.h" | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef TEMPORARYSTORAGE_H_ | ||||
| #define TEMPORARYSTORAGE_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BINARYHEAP_H_INCLUDED | ||||
| #define BINARYHEAP_H_INCLUDED | ||||
|  | ||||
| @ -1,25 +1,34 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| #ifndef CONCURRENTQUEUE_H_INCLUDED | ||||
| #define CONCURRENTQUEUE_H_INCLUDED | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef CONCURRENTQUEUE_H_ | ||||
| #define CONCURRENTQUEUE_H_ | ||||
| 
 | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
| #include <boost/bind.hpp> | ||||
| #include <boost/circular_buffer.hpp> | ||||
| @ -27,57 +36,64 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include <boost/thread/mutex.hpp> | ||||
| #include <boost/thread/thread.hpp> | ||||
| 
 | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
| template<typename Data> | ||||
| class ConcurrentQueue { | ||||
| 
 | ||||
|     typedef typename boost::circular_buffer<Data>::size_type size_t; | ||||
| 
 | ||||
| public: | ||||
|     ConcurrentQueue(const size_t max_size) : internal_queue(max_size) { } | ||||
|     ConcurrentQueue(const size_t max_size) : m_internal_queue(max_size) { } | ||||
| 
 | ||||
|     inline void push(Data const& data) { | ||||
|     inline void push(const Data & data) { | ||||
|         boost::mutex::scoped_lock lock(m_mutex); | ||||
|         m_not_full.wait(lock, boost::bind(&ConcurrentQueue<Data>::is_not_full, this)); | ||||
|         internal_queue.push_back(data); | ||||
|         m_not_full.wait( | ||||
|             lock, | ||||
|             boost::bind(&ConcurrentQueue<Data>::is_not_full, this) | ||||
|         ); | ||||
|         m_internal_queue.push_back(data); | ||||
|         lock.unlock(); | ||||
|         m_not_empty.notify_one(); | ||||
|     } | ||||
| 
 | ||||
|     inline bool empty() const { | ||||
|         return internal_queue.empty(); | ||||
|         return m_internal_queue.empty(); | ||||
|     } | ||||
| 
 | ||||
|     inline void wait_and_pop(Data& popped_value) { | ||||
|     inline void wait_and_pop(Data & popped_value) { | ||||
|         boost::mutex::scoped_lock lock(m_mutex); | ||||
|         m_not_empty.wait(lock, boost::bind(&ConcurrentQueue<Data>::is_not_empty, this)); | ||||
|         popped_value=internal_queue.front(); | ||||
|         internal_queue.pop_front(); | ||||
|         m_not_empty.wait( | ||||
|             lock, | ||||
|             boost::bind(&ConcurrentQueue<Data>::is_not_empty, this) | ||||
|         ); | ||||
|         popped_value = m_internal_queue.front(); | ||||
|         m_internal_queue.pop_front(); | ||||
|         lock.unlock(); | ||||
|         m_not_full.notify_one(); | ||||
|     } | ||||
| 
 | ||||
|     inline bool try_pop(Data& popped_value) { | ||||
|         boost::mutex::scoped_lock lock(m_mutex); | ||||
|         if(internal_queue.empty()) { | ||||
|         if(m_internal_queue.empty()) { | ||||
|             return false; | ||||
|         } | ||||
|         popped_value=internal_queue.front(); | ||||
|         internal_queue.pop_front(); | ||||
|         popped_value=m_internal_queue.front(); | ||||
|         m_internal_queue.pop_front(); | ||||
|         lock.unlock(); | ||||
|         m_not_full.notify_one(); | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     boost::circular_buffer<Data> internal_queue; | ||||
|     boost::mutex m_mutex; | ||||
|     boost::condition m_not_empty; | ||||
|     boost::condition m_not_full; | ||||
|     inline bool is_not_empty() const { | ||||
|         return !m_internal_queue.empty(); | ||||
|     } | ||||
| 
 | ||||
|     inline bool is_not_empty() const { return internal_queue.size() > 0; } | ||||
|     inline bool is_not_full() const { return internal_queue.size() < internal_queue.capacity(); } | ||||
|     inline bool is_not_full() const { | ||||
|         return m_internal_queue.size() < m_internal_queue.capacity(); | ||||
|     } | ||||
| 
 | ||||
|     boost::circular_buffer<Data>    m_internal_queue; | ||||
|     boost::mutex                    m_mutex; | ||||
|     boost::condition                m_not_empty; | ||||
|     boost::condition                m_not_full; | ||||
| }; | ||||
| 
 | ||||
| #endif //#ifndef CONCURRENTQUEUE_H_INCLUDED
 | ||||
| #endif /* CONCURRENTQUEUE_H_ */ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef FIXED_POINT_COORDINATE_H_ | ||||
| #define FIXED_POINT_COORDINATE_H_ | ||||
| @ -118,8 +125,8 @@ inline double ApproximateEuclideanDistance(const FixedPointCoordinate &c1, const | ||||
| 
 | ||||
| static inline void convertInternalLatLonToString(const int value, std::string & output) { | ||||
|     char buffer[100]; | ||||
|     buffer[10] = 0; // Nullterminierung
 | ||||
|     char* string = printInt< 10, 6 >( buffer, value ); | ||||
|     buffer[11] = 0; // zero termination
 | ||||
|     char* string = printInt< 11, 6 >( buffer, value ); | ||||
|     output = string; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1,27 +1,35 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef DEALLOCATINGVECTOR_H_ | ||||
| #define DEALLOCATINGVECTOR_H_ | ||||
| 
 | ||||
| #include <cassert> | ||||
| #include <cstring> | ||||
| #include <vector> | ||||
| 
 | ||||
| #if __cplusplus > 199711L | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef DYNAMICGRAPH_H_INCLUDED | ||||
| #define DYNAMICGRAPH_H_INCLUDED | ||||
|  | ||||
| @ -1,25 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
|   Created on: 18.11.2010 | ||||
|   Author: dennis | ||||
|  */ | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef HASHTABLE_H_ | ||||
| #define HASHTABLE_H_ | ||||
| @ -36,6 +40,11 @@ public: | ||||
| 
 | ||||
|     HashTable(const unsigned size) : super(size) { } | ||||
| 
 | ||||
|     HashTable &operator=(const HashTable &other) { | ||||
|         super::operator = (other); | ||||
|         return *this; | ||||
|     } | ||||
| 
 | ||||
|     inline void Add(const keyT& key, const valueT& value){ | ||||
|         super::insert(std::make_pair(key, value)); | ||||
|     } | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef HILBERTVALUE_H_ | ||||
| #define HILBERTVALUE_H_ | ||||
|  | ||||
| @ -1,33 +1,41 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| #ifndef EDGE_H | ||||
| #define EDGE_H | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef IMPORT_EDGE_H | ||||
| #define IMPORT_EDGE_H | ||||
| 
 | ||||
| #include "../Util/OSRMException.h" | ||||
| #include <cassert> | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
| #include <boost/assert.hpp> | ||||
| 
 | ||||
| class NodeBasedEdge { | ||||
| public: | ||||
| 
 | ||||
| public: | ||||
|     bool operator< (const NodeBasedEdge& e) const { | ||||
|         if (source() == e.source()) { | ||||
|             if (target() == e.target()) { | ||||
| @ -58,9 +66,9 @@ public: | ||||
|         _target(t), | ||||
|         _name(n), | ||||
|         _weight(w), | ||||
|         _type(ty), | ||||
|         forward(f), | ||||
|         backward(b), | ||||
|         _type(ty), | ||||
|         _roundabout(ra), | ||||
|         _ignoreInGrid(ig), | ||||
|         _accessRestricted(ar), | ||||
| @ -71,42 +79,41 @@ public: | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     NodeID target() const {return _target; } | ||||
|     NodeID source() const {return _source; } | ||||
|     NodeID name() const { return _name; } | ||||
|     EdgeWeight weight() const {return _weight; } | ||||
|     NodeID target()             const {return _target; } | ||||
|     NodeID source()             const {return _source; } | ||||
|     NodeID name()               const { return _name;  } | ||||
|     EdgeWeight weight()         const {return _weight; } | ||||
|     short type()                const { | ||||
|         BOOST_ASSERT_MSG(_type >= 0, "type of ImportEdge invalid"); | ||||
|                                         return _type;   } | ||||
|     bool isBackward()           const { return backward; } | ||||
|     bool isForward()            const { return forward; } | ||||
|     bool isLocatable()          const { return _type != 14; } | ||||
|     bool isRoundabout()         const { return _roundabout; } | ||||
|     bool ignoreInGrid()         const { return _ignoreInGrid; } | ||||
|     bool isAccessRestricted()   const { return _accessRestricted; } | ||||
|     bool isContraFlow()         const { return _contraFlow; } | ||||
| 
 | ||||
|     short type() const { assert(_type >= 0); return _type; } | ||||
|     bool isBackward() const { return backward; } | ||||
|     bool isForward() const { return forward; } | ||||
|     bool isLocatable() const { return _type != 14; } | ||||
|     bool isRoundabout() const { return _roundabout; } | ||||
|     bool ignoreInGrid() const { return _ignoreInGrid; } | ||||
|     bool isAccessRestricted() const { return _accessRestricted; } | ||||
|     bool isContraFlow() const { return _contraFlow; } | ||||
| 
 | ||||
|     NodeID _source; | ||||
|     NodeID _target; | ||||
|     NodeID _name; | ||||
|     EdgeWeight _weight; | ||||
|     bool forward; | ||||
|     bool backward; | ||||
|     short _type; | ||||
|     bool _roundabout; | ||||
|     bool _ignoreInGrid; | ||||
|     bool _accessRestricted; | ||||
|     bool _contraFlow; | ||||
|     //TODO: names need to be fixed.
 | ||||
|     NodeID      _source; | ||||
|     NodeID      _target; | ||||
|     NodeID      _name; | ||||
|     EdgeWeight  _weight; | ||||
|     short       _type; | ||||
|     bool        forward:1; | ||||
|     bool        backward:1; | ||||
|     bool        _roundabout:1; | ||||
|     bool        _ignoreInGrid:1; | ||||
|     bool        _accessRestricted:1; | ||||
|     bool        _contraFlow:1; | ||||
| 
 | ||||
| private: | ||||
|     /** Default constructor. target and weight are set to 0.*/ | ||||
|     NodeBasedEdge() : | ||||
|         _source(0), _target(0), _name(0), _weight(0), forward(0), backward(0), _type(0), _roundabout(false), _ignoreInGrid(false), _accessRestricted(false), _contraFlow(false) { assert(false); } //shall not be used.
 | ||||
| 
 | ||||
|     NodeBasedEdge() { } | ||||
| }; | ||||
| 
 | ||||
| class EdgeBasedEdge { | ||||
| public: | ||||
| 
 | ||||
| public: | ||||
|     bool operator< (const EdgeBasedEdge& e) const { | ||||
|         if (source() == e.source()) { | ||||
|             if (target() == e.target()) { | ||||
| @ -141,7 +148,14 @@ public: | ||||
|         m_backward(false) | ||||
|     { } | ||||
| 
 | ||||
|     explicit EdgeBasedEdge(const NodeID s, const NodeID t, const NodeID v, const EdgeWeight w, const bool f, const bool b) : | ||||
|     explicit EdgeBasedEdge( | ||||
|         const NodeID s, | ||||
|         const NodeID t, | ||||
|         const NodeID v, | ||||
|         const EdgeWeight w, | ||||
|         const bool f, | ||||
|         const bool b | ||||
|     ) : | ||||
|         m_source(s), | ||||
|         m_target(t), | ||||
|         m_edgeID(v), | ||||
| @ -150,21 +164,22 @@ public: | ||||
|         m_backward(b) | ||||
|     {} | ||||
| 
 | ||||
|     NodeID target() const {return m_target; } | ||||
|     NodeID source() const {return m_source; } | ||||
|     EdgeWeight weight() const {return m_weight; } | ||||
|     NodeID id() const { return m_edgeID; } | ||||
|     bool isBackward() const { return m_backward; } | ||||
|     bool isForward() const { return m_forward; } | ||||
|     NodeID      target()        const { return m_target;   } | ||||
|     NodeID      source()        const { return m_source;   } | ||||
|     EdgeWeight  weight()        const { return m_weight;   } | ||||
|     NodeID      id()            const { return m_edgeID;   } | ||||
|     bool        isBackward()    const { return m_backward; } | ||||
|     bool        isForward()     const { return m_forward;  } | ||||
| 
 | ||||
| private: | ||||
|     NodeID m_source; | ||||
|     NodeID m_target; | ||||
|     NodeID m_edgeID; | ||||
|     EdgeWeight m_weight:30; | ||||
|     bool m_forward:1; | ||||
|     bool m_backward:1; | ||||
|     NodeID      m_source; | ||||
|     NodeID      m_target; | ||||
|     NodeID      m_edgeID; | ||||
|     EdgeWeight  m_weight:30; | ||||
|     bool        m_forward:1; | ||||
|     bool        m_backward:1; | ||||
| }; | ||||
| 
 | ||||
| typedef NodeBasedEdge ImportEdge; | ||||
| 
 | ||||
| #endif // EDGE_H
 | ||||
| #endif /* IMPORT_EDGE_H */ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef IMPORTNODE_H_ | ||||
| #define IMPORTNODE_H_ | ||||
|  | ||||
| @ -1,22 +1,30 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef INPUTREADERFACTORY_H | ||||
| #define INPUTREADERFACTORY_H | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef LRUCACHE_H | ||||
| #define LRUCACHE_H | ||||
|  | ||||
| @ -1,21 +1,28 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef MERCATORUTIL_H_ | ||||
|  | ||||
| @ -1,22 +1,30 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef NODEINFORMATIONHELPDESK_H_ | ||||
| #define NODEINFORMATIONHELPDESK_H_ | ||||
| @ -40,84 +48,75 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| typedef EdgeBasedGraphFactory::EdgeBasedNode RTreeLeaf; | ||||
| 
 | ||||
| class NodeInformationHelpDesk : boost::noncopyable { | ||||
| 
 | ||||
| public: | ||||
|     NodeInformationHelpDesk( | ||||
|         const std::string & ramIndexInput, | ||||
|         const std::string & fileIndexInput, | ||||
|         const std::string & ram_index_filename, | ||||
|         const std::string & mem_index_filename, | ||||
|         const std::string & nodes_filename, | ||||
|         const std::string & edges_filename, | ||||
|         const unsigned number_of_nodes, | ||||
|         const unsigned check_sum | ||||
|     ) : number_of_nodes(number_of_nodes), check_sum(check_sum) | ||||
|         const unsigned m_number_of_nodes, | ||||
|         const unsigned m_check_sum | ||||
|     ) : | ||||
|         m_number_of_nodes(m_number_of_nodes), | ||||
|         m_check_sum(m_check_sum) | ||||
|     { | ||||
|         if ( ramIndexInput.empty() ) { | ||||
|         if ( ram_index_filename.empty() ) { | ||||
|             throw OSRMException("no ram index file name in server ini"); | ||||
|         } | ||||
|         if ( fileIndexInput.empty() ) { | ||||
|         if ( mem_index_filename.empty() ) { | ||||
|             throw OSRMException("no mem index file name in server ini"); | ||||
|         } | ||||
|         if ( nodes_filename.empty() ) { | ||||
|         if ( nodes_filename.empty()     ) { | ||||
|             throw OSRMException("no nodes file name in server ini"); | ||||
|         } | ||||
|         if ( edges_filename.empty() ) { | ||||
|         if ( edges_filename.empty()     ) { | ||||
|             throw OSRMException("no edges file name in server ini"); | ||||
|         } | ||||
| 
 | ||||
|         read_only_rtree = new StaticRTree<RTreeLeaf>( | ||||
|             ramIndexInput, | ||||
|             fileIndexInput | ||||
|         m_ro_rtree_ptr = new StaticRTree<RTreeLeaf>( | ||||
|             ram_index_filename, | ||||
|             mem_index_filename | ||||
|         ); | ||||
|         BOOST_ASSERT_MSG( | ||||
|             0 == coordinateVector.size(), | ||||
|             0 == m_coordinate_list.size(), | ||||
|             "Coordinate vector not empty" | ||||
|         ); | ||||
| 
 | ||||
|         LoadNodesAndEdges(nodes_filename, edges_filename); | ||||
|     } | ||||
| 
 | ||||
|     //Todo: Shared memory mechanism
 | ||||
| 	~NodeInformationHelpDesk() { | ||||
| 		delete read_only_rtree; | ||||
| 		delete m_ro_rtree_ptr; | ||||
| 	} | ||||
| 
 | ||||
| 	inline int getLatitudeOfNode(const unsigned id) const { | ||||
| 	    const NodeID node = origEdgeData_viaNode.at(id); | ||||
| 	    return coordinateVector.at(node).lat; | ||||
| 	} | ||||
| 
 | ||||
| 	inline int getLongitudeOfNode(const unsigned id) const { | ||||
|         const NodeID node = origEdgeData_viaNode.at(id); | ||||
| 	    return coordinateVector.at(node).lon; | ||||
| 	} | ||||
| 
 | ||||
| 	inline unsigned getNameIndexFromEdgeID(const unsigned id) const { | ||||
| 	    return origEdgeData_nameID.at(id); | ||||
| 	} | ||||
| 
 | ||||
|     inline TurnInstruction getTurnInstructionFromEdgeID(const unsigned id) const { | ||||
|         return origEdgeData_turnInstruction.at(id); | ||||
|     inline FixedPointCoordinate GetCoordinateOfNode(const unsigned id) const { | ||||
|         const NodeID node = m_via_node_list.at(id); | ||||
|         return m_coordinate_list.at(node); | ||||
|     } | ||||
| 
 | ||||
|     inline NodeID getNumberOfNodes() const { | ||||
|         return number_of_nodes; | ||||
| 	inline unsigned GetNameIndexFromEdgeID(const unsigned id) const { | ||||
| 	    return m_name_ID_list.at(id); | ||||
| 	} | ||||
| 
 | ||||
|     inline TurnInstruction GetTurnInstructionForEdgeID(const unsigned id) const { | ||||
|         return m_turn_instruction_list.at(id); | ||||
|     } | ||||
| 
 | ||||
| 	inline NodeID getNumberOfNodes2() const { | ||||
|         return coordinateVector.size(); | ||||
|     inline NodeID GetNumberOfNodes() const { | ||||
|         return m_number_of_nodes; | ||||
|     } | ||||
| 
 | ||||
|     inline bool FindNearestNodeCoordForLatLon( | ||||
|     inline bool LocateClosestEndPointForCoordinate( | ||||
|             const FixedPointCoordinate& input_coordinate, | ||||
|             FixedPointCoordinate& result, | ||||
|             const unsigned zoom_level = 18 | ||||
|     ) const { | ||||
|         PhantomNode resulting_phantom_node; | ||||
|         bool foundNode = FindPhantomNodeForCoordinate( | ||||
|             input_coordinate, | ||||
|             resulting_phantom_node, zoom_level | ||||
|         ); | ||||
|         result = resulting_phantom_node.location; | ||||
|         return foundNode; | ||||
|         bool found_node = m_ro_rtree_ptr->LocateClosestEndPointForCoordinate( | ||||
|                             input_coordinate, | ||||
|                             result, zoom_level | ||||
|                           ); | ||||
|         return found_node; | ||||
|     } | ||||
| 
 | ||||
|     inline bool FindPhantomNodeForCoordinate( | ||||
| @ -125,7 +124,7 @@ public: | ||||
|             PhantomNode & resulting_phantom_node, | ||||
|             const unsigned zoom_level | ||||
|     ) const { | ||||
|         return read_only_rtree->FindPhantomNodeForCoordinate( | ||||
|         return m_ro_rtree_ptr->FindPhantomNodeForCoordinate( | ||||
|                 input_coordinate, | ||||
|                 resulting_phantom_node, | ||||
|                 zoom_level | ||||
| @ -133,7 +132,7 @@ public: | ||||
|     } | ||||
| 
 | ||||
| 	inline unsigned GetCheckSum() const { | ||||
| 	    return check_sum; | ||||
| 	    return m_check_sum; | ||||
| 	} | ||||
| 
 | ||||
| private: | ||||
| @ -157,48 +156,63 @@ private: | ||||
|             throw OSRMException("edges file is empty"); | ||||
|         } | ||||
| 
 | ||||
|         boost::filesystem::ifstream nodes_input_stream(nodes_file, std::ios::binary); | ||||
|         boost::filesystem::ifstream edges_input_stream(edges_file, std::ios::binary); | ||||
|         boost::filesystem::ifstream nodes_input_stream( | ||||
|             nodes_file, | ||||
|             std::ios::binary | ||||
|         ); | ||||
| 
 | ||||
|         SimpleLogger().Write(logDEBUG) << "Loading node data"; | ||||
|         NodeInfo b; | ||||
|         boost::filesystem::ifstream edges_input_stream( | ||||
|             edges_file, std::ios::binary | ||||
|         ); | ||||
| 
 | ||||
|         SimpleLogger().Write(logDEBUG) | ||||
|             << "Loading node data"; | ||||
|         NodeInfo current_node; | ||||
|         while(!nodes_input_stream.eof()) { | ||||
|             nodes_input_stream.read((char *)&b, sizeof(NodeInfo)); | ||||
|             coordinateVector.push_back(FixedPointCoordinate(b.lat, b.lon)); | ||||
|             nodes_input_stream.read((char *)¤t_node, sizeof(NodeInfo)); | ||||
|             m_coordinate_list.push_back( | ||||
|                 FixedPointCoordinate( | ||||
|                     current_node.lat, | ||||
|                     current_node.lon | ||||
|                 ) | ||||
|             ); | ||||
|         } | ||||
|         std::vector<FixedPointCoordinate>(coordinateVector).swap(coordinateVector); | ||||
|         std::vector<FixedPointCoordinate>(m_coordinate_list).swap(m_coordinate_list); | ||||
|         nodes_input_stream.close(); | ||||
| 
 | ||||
|         SimpleLogger().Write(logDEBUG) << "Loading edge data"; | ||||
|         unsigned numberOfOrigEdges(0); | ||||
|         edges_input_stream.read((char*)&numberOfOrigEdges, sizeof(unsigned)); | ||||
|         origEdgeData_viaNode.resize(numberOfOrigEdges); | ||||
|         origEdgeData_nameID.resize(numberOfOrigEdges); | ||||
|         origEdgeData_turnInstruction.resize(numberOfOrigEdges); | ||||
|         SimpleLogger().Write(logDEBUG) | ||||
|             << "Loading edge data"; | ||||
|         unsigned number_of_edges = 0; | ||||
|         edges_input_stream.read((char*)&number_of_edges, sizeof(unsigned)); | ||||
|         m_via_node_list.resize(number_of_edges); | ||||
|         m_name_ID_list.resize(number_of_edges); | ||||
|         m_turn_instruction_list.resize(number_of_edges); | ||||
| 
 | ||||
|         OriginalEdgeData deserialized_originalEdgeData; | ||||
|         for(unsigned i = 0; i < numberOfOrigEdges; ++i) { | ||||
|         OriginalEdgeData current_edge_data; | ||||
|         for(unsigned i = 0; i < number_of_edges; ++i) { | ||||
|             edges_input_stream.read( | ||||
|                 (char*)&(deserialized_originalEdgeData), | ||||
|                 (char*)&(current_edge_data), | ||||
|                 sizeof(OriginalEdgeData) | ||||
|             ); | ||||
|             origEdgeData_viaNode[i] = deserialized_originalEdgeData.viaNode; | ||||
|             origEdgeData_nameID[i]  = deserialized_originalEdgeData.nameID; | ||||
|             origEdgeData_turnInstruction[i] = deserialized_originalEdgeData.turnInstruction; | ||||
|             m_via_node_list[i] = current_edge_data.viaNode; | ||||
|             m_name_ID_list[i]  = current_edge_data.nameID; | ||||
|             m_turn_instruction_list[i] = current_edge_data.turnInstruction; | ||||
|         } | ||||
|         edges_input_stream.close(); | ||||
|         SimpleLogger().Write(logDEBUG) << "Loaded " << numberOfOrigEdges << " orig edges"; | ||||
|         SimpleLogger().Write(logDEBUG) << "Opening NN indices"; | ||||
|         SimpleLogger().Write(logDEBUG) | ||||
|             << "Loaded " << number_of_edges << " orig edges"; | ||||
|         SimpleLogger().Write(logDEBUG) | ||||
|             << "Opening NN indices"; | ||||
|     } | ||||
| 
 | ||||
| 	std::vector<FixedPointCoordinate> coordinateVector; | ||||
| 	std::vector<NodeID> origEdgeData_viaNode; | ||||
| 	std::vector<unsigned> origEdgeData_nameID; | ||||
| 	std::vector<TurnInstruction> origEdgeData_turnInstruction; | ||||
| 	std::vector<FixedPointCoordinate>  m_coordinate_list; | ||||
| 	std::vector<NodeID>                m_via_node_list; | ||||
| 	std::vector<unsigned>              m_name_ID_list; | ||||
| 	std::vector<TurnInstruction>       m_turn_instruction_list; | ||||
| 
 | ||||
| 	StaticRTree<EdgeBasedGraphFactory::EdgeBasedNode> * read_only_rtree; | ||||
| 	const unsigned number_of_nodes; | ||||
| 	const unsigned check_sum; | ||||
| 	StaticRTree<EdgeBasedGraphFactory::EdgeBasedNode> * m_ro_rtree_ptr; | ||||
| 	const unsigned m_number_of_nodes; | ||||
| 	const unsigned m_check_sum; | ||||
| }; | ||||
| 
 | ||||
| #endif /*NODEINFORMATIONHELPDESK_H_*/ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef PERCENT_H | ||||
| #define PERCENT_H | ||||
| @ -24,8 +31,7 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "../Util/OpenMPWrapper.h" | ||||
| #include <iostream> | ||||
| 
 | ||||
| class Percent | ||||
| { | ||||
| class Percent { | ||||
| public: | ||||
|     /**
 | ||||
|      * Constructor. | ||||
| @ -56,8 +62,7 @@ public: | ||||
|             std::cout << " 100%" << std::endl; | ||||
|     } | ||||
| 
 | ||||
|     void printIncrement() | ||||
|     { | ||||
|     void printIncrement() { | ||||
| #pragma omp atomic | ||||
|         ++_current_value; | ||||
|         printStatus(_current_value); | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef PHANTOMNODES_H_ | ||||
| #define PHANTOMNODES_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef QUERYEDGE_H_ | ||||
| #define QUERYEDGE_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef _NODE_COORDS_H | ||||
| #define _NODE_COORDS_H | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef RAWROUTEDATA_H_ | ||||
| #define RAWROUTEDATA_H_ | ||||
|  | ||||
| @ -1,24 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef RESTRICTION_H_ | ||||
| #define RESTRICTION_H_ | ||||
|  | ||||
| @ -1,49 +1,52 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "SearchEngine.h" | ||||
| 
 | ||||
| SearchEngine::SearchEngine( | ||||
|     QueryGraph * g, | ||||
|     NodeInformationHelpDesk * nh, | ||||
|     std::vector<std::string> & n | ||||
|     ) : | ||||
|         _queryData(g, nh, n), | ||||
|         shortestPath(_queryData), | ||||
|         alternativePaths(_queryData) | ||||
|     {} | ||||
|     SearchEngine::~SearchEngine() {} | ||||
| SearchEngine::SearchEngine( QueryObjectsStorage * query_objects ) : | ||||
|     _queryData(query_objects), | ||||
|     shortestPath(_queryData), | ||||
|     alternativePaths(_queryData) | ||||
| {} | ||||
| 
 | ||||
| SearchEngine::~SearchEngine() {} | ||||
| 
 | ||||
| void SearchEngine::GetCoordinatesForNodeID( | ||||
|     NodeID id, | ||||
|     FixedPointCoordinate& result | ||||
|     ) const { | ||||
|     result.lat = _queryData.nodeHelpDesk->getLatitudeOfNode(id); | ||||
|     result.lon = _queryData.nodeHelpDesk->getLongitudeOfNode(id); | ||||
| ) const { | ||||
|         result = _queryData.nodeHelpDesk->GetCoordinateOfNode(id); | ||||
| } | ||||
| 
 | ||||
| void SearchEngine::FindPhantomNodeForCoordinate( | ||||
|     const FixedPointCoordinate & location, | ||||
|     PhantomNode & result, | ||||
|     const unsigned zoomLevel | ||||
|     ) const { | ||||
| ) const { | ||||
|     _queryData.nodeHelpDesk->FindPhantomNodeForCoordinate( | ||||
|         location, | ||||
|         result, zoomLevel | ||||
| @ -53,29 +56,29 @@ void SearchEngine::FindPhantomNodeForCoordinate( | ||||
| NodeID SearchEngine::GetNameIDForOriginDestinationNodeID( | ||||
|     const NodeID s, | ||||
|     const NodeID t | ||||
|     ) const { | ||||
|     if(s == t){ | ||||
| ) const { | ||||
|     if(s == t) { | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     EdgeID e = _queryData.graph->FindEdge(s, t); | ||||
|     if(e == UINT_MAX) { | ||||
|         e = _queryData.graph->FindEdge( t, s ); | ||||
|     } | ||||
| 
 | ||||
|     if(UINT_MAX == e) { | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     assert(e != UINT_MAX); | ||||
|     const QueryEdge::EdgeData ed = _queryData.graph->GetEdgeData(e); | ||||
|     return ed.id; | ||||
| } | ||||
| 
 | ||||
| std::string SearchEngine::GetEscapedNameForNameID(const unsigned nameID) const { | ||||
|     bool is_name_invalid = (nameID >= _queryData.names.size() || nameID == 0); | ||||
|     if (is_name_invalid) { | ||||
|         return std::string(""); | ||||
|     } | ||||
| 
 | ||||
|     return HTMLEntitize(_queryData.names.at(nameID)); | ||||
|     std::string result; | ||||
|     _queryData.query_objects->GetName(nameID, result); | ||||
|     return HTMLEntitize(result); | ||||
| } | ||||
| 
 | ||||
| SearchEngineHeapPtr SearchEngineData::forwardHeap; | ||||
| @ -86,4 +89,3 @@ SearchEngineHeapPtr SearchEngineData::backwardHeap2; | ||||
| 
 | ||||
| SearchEngineHeapPtr SearchEngineData::forwardHeap3; | ||||
| SearchEngineHeapPtr SearchEngineData::backwardHeap3; | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SEARCHENGINE_H_ | ||||
| #define SEARCHENGINE_H_ | ||||
| @ -28,6 +35,7 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "SearchEngineData.h" | ||||
| #include "../RoutingAlgorithms/AlternativePathRouting.h" | ||||
| #include "../RoutingAlgorithms/ShortestPathRouting.h" | ||||
| #include "../Server/DataStructures/QueryObjectsStorage.h" | ||||
| 
 | ||||
| #include "../Util/StringUtil.h" | ||||
| #include "../typedefs.h" | ||||
| @ -44,11 +52,7 @@ public: | ||||
|     ShortestPathRouting<SearchEngineData> shortestPath; | ||||
|     AlternativeRouting<SearchEngineData> alternativePaths; | ||||
| 
 | ||||
|     SearchEngine( | ||||
|         QueryGraph * g, | ||||
|         NodeInformationHelpDesk * nh, | ||||
|         std::vector<std::string> & n | ||||
|     ); | ||||
|     SearchEngine( QueryObjectsStorage * query_objects ); | ||||
| 	~SearchEngine(); | ||||
| 
 | ||||
| 	void GetCoordinatesForNodeID(NodeID id, FixedPointCoordinate& result) const; | ||||
|  | ||||
| @ -1,33 +1,40 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "SearchEngineData.h" | ||||
| 
 | ||||
| void SearchEngineData::InitializeOrClearFirstThreadLocalStorage() { | ||||
|     if(!forwardHeap.get()) { | ||||
|         forwardHeap.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes())); | ||||
|         forwardHeap.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); | ||||
|     } else { | ||||
|         forwardHeap->Clear(); | ||||
|     } | ||||
|     if(!backwardHeap.get()) { | ||||
|         backwardHeap.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes())); | ||||
|         backwardHeap.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); | ||||
|     } else { | ||||
|         backwardHeap->Clear(); | ||||
|     } | ||||
| @ -35,12 +42,12 @@ void SearchEngineData::InitializeOrClearFirstThreadLocalStorage() { | ||||
| 
 | ||||
| void SearchEngineData::InitializeOrClearSecondThreadLocalStorage() { | ||||
|     if(!forwardHeap2.get()) { | ||||
|         forwardHeap2.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes())); | ||||
|         forwardHeap2.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); | ||||
|     } else { | ||||
|         forwardHeap2->Clear(); | ||||
|     } | ||||
|     if(!backwardHeap2.get()) { | ||||
|         backwardHeap2.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes())); | ||||
|         backwardHeap2.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); | ||||
|      } else { | ||||
|         backwardHeap2->Clear(); | ||||
|     } | ||||
| @ -48,12 +55,12 @@ void SearchEngineData::InitializeOrClearSecondThreadLocalStorage() { | ||||
| 
 | ||||
| void SearchEngineData::InitializeOrClearThirdThreadLocalStorage() { | ||||
|     if(!forwardHeap3.get()) { | ||||
|         forwardHeap3.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes())); | ||||
|         forwardHeap3.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); | ||||
|     } else { | ||||
|         forwardHeap3->Clear(); | ||||
|     } | ||||
|     if(!backwardHeap3.get()) { | ||||
|         backwardHeap3.reset(new QueryHeap(nodeHelpDesk->getNumberOfNodes())); | ||||
|         backwardHeap3.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); | ||||
|     } else { | ||||
|         backwardHeap3->Clear(); | ||||
|     } | ||||
|  | ||||
| @ -1,27 +1,34 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "BinaryHeap.h" | ||||
| #include "QueryEdge.h" | ||||
| #include "NodeInformationHelpDesk.h" | ||||
| #include "StaticGraph.h" | ||||
| #include "../Server/DataStructures/QueryObjectsStorage.h" | ||||
| 
 | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
| @ -41,10 +48,17 @@ typedef boost::thread_specific_ptr<QueryHeapType> SearchEngineHeapPtr; | ||||
| struct SearchEngineData { | ||||
|     typedef QueryGraph Graph; | ||||
|     typedef QueryHeapType QueryHeap; | ||||
|     SearchEngineData(QueryGraph * g, NodeInformationHelpDesk * nh, std::vector<std::string> & n) :graph(g), nodeHelpDesk(nh), names(n) {} | ||||
|     const QueryGraph * graph; | ||||
|     NodeInformationHelpDesk * nodeHelpDesk; | ||||
|     std::vector<std::string> & names; | ||||
|     SearchEngineData(QueryObjectsStorage * query_objects) | ||||
|      : | ||||
|         query_objects(query_objects), | ||||
|         graph(query_objects->graph), | ||||
|         nodeHelpDesk(query_objects->nodeHelpDesk) | ||||
|     {} | ||||
| 
 | ||||
|     const QueryObjectsStorage       * query_objects; | ||||
|     const QueryGraph                * graph; | ||||
|     const NodeInformationHelpDesk   * nodeHelpDesk; | ||||
| 
 | ||||
|     static SearchEngineHeapPtr forwardHeap; | ||||
|     static SearchEngineHeapPtr backwardHeap; | ||||
|     static SearchEngineHeapPtr forwardHeap2; | ||||
|  | ||||
| @ -1,26 +1,34 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SEGMENTINFORMATION_H_ | ||||
| #define SEGMENTINFORMATION_H_ | ||||
| 
 | ||||
| #include "Coordinate.h" | ||||
| #include "TurnInstructions.h" | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SIMPLESTACK_H_ | ||||
| #define SIMPLESTACK_H_ | ||||
|  | ||||
| @ -1,26 +1,34 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef STATICGRAPH_H_INCLUDED | ||||
| #define STATICGRAPH_H_INCLUDED | ||||
| 
 | ||||
| #include "../DataStructures/Percent.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
|  | ||||
| @ -1,25 +1,32 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| KD Tree coded by Christian Vetter, Monav Project | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| // KD Tree coded by Christian Vetter, Monav Project
 | ||||
| 
 | ||||
|  */ | ||||
| #ifndef STATICKDTREE_H_INCLUDED | ||||
| #define STATICKDTREE_H_INCLUDED | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef STATICRTREE_H_ | ||||
| #define STATICRTREE_H_ | ||||
| @ -42,11 +49,8 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include <boost/noncopyable.hpp> | ||||
| #include <boost/thread.hpp> | ||||
| 
 | ||||
| #include <cassert> | ||||
| #include <cfloat> | ||||
| #include <climits> | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <limits> | ||||
| #include <queue> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| @ -129,7 +133,7 @@ private: | ||||
|                 return 0.0; | ||||
|             } | ||||
| 
 | ||||
|             double min_dist = DBL_MAX; | ||||
|             double min_dist = std::numeric_limits<double>::max(); | ||||
|             min_dist = std::min( | ||||
|                     min_dist, | ||||
|                     ApproximateDistance( | ||||
| @ -170,7 +174,7 @@ private: | ||||
|         } | ||||
| 
 | ||||
|         inline double GetMinMaxDist(const FixedPointCoordinate & location) const { | ||||
|             double min_max_dist = DBL_MAX; | ||||
|             double min_max_dist = std::numeric_limits<double>::max(); | ||||
|             //Get minmax distance to each of the four sides
 | ||||
|             FixedPointCoordinate upper_left (max_lat, min_lon); | ||||
|             FixedPointCoordinate upper_right(max_lat, max_lon); | ||||
| @ -268,7 +272,7 @@ private: | ||||
|             const uint32_t n_id, | ||||
|             const double dist | ||||
|         ) : node_id(n_id), min_dist(dist) {} | ||||
|         QueryCandidate() : node_id(UINT_MAX), min_dist(DBL_MAX) {} | ||||
|         QueryCandidate() : node_id(UINT_MAX), min_dist(std::numeric_limits<double>::max()) {} | ||||
|         uint32_t node_id; | ||||
|         double min_dist; | ||||
|         inline bool operator<(const QueryCandidate & other) const { | ||||
| @ -461,8 +465,8 @@ public: | ||||
|         uint32_t io_count = 0; | ||||
|         uint32_t explored_tree_nodes_count = 0; | ||||
|         SimpleLogger().Write() << "searching for coordinate " << input_coordinate; | ||||
|         double min_dist = DBL_MAX; | ||||
|         double min_max_dist = DBL_MAX; | ||||
|         double min_dist = std::numeric_limits<double>::max(); | ||||
|         double min_max_dist = std::numeric_limits<double>::max(); | ||||
|         bool found_a_nearest_edge = false; | ||||
| 
 | ||||
|         FixedPointCoordinate nearest, current_start_coordinate, current_end_coordinate; | ||||
| @ -470,7 +474,7 @@ public: | ||||
|         //initialize queue with root element
 | ||||
|         std::priority_queue<QueryCandidate> traversal_queue; | ||||
|         traversal_queue.push(QueryCandidate(0, m_search_tree[0].minimum_bounding_rectangle.GetMinDist(input_coordinate))); | ||||
|         BOOST_ASSERT_MSG(FLT_EPSILON > (0. - traversal_queue.top().min_dist), "Root element in NN Search has min dist != 0."); | ||||
|         BOOST_ASSERT_MSG(std::numberic_limits<double>::epsilon() > (0. - traversal_queue.top().min_dist), "Root element in NN Search has min dist != 0."); | ||||
| 
 | ||||
|         while(!traversal_queue.empty()) { | ||||
|             const QueryCandidate current_query_node = traversal_queue.top(); traversal_queue.pop(); | ||||
| @ -595,6 +599,113 @@ public: | ||||
|     } | ||||
| 
 | ||||
|   */ | ||||
|     bool LocateClosestEndPointForCoordinate( | ||||
|             const FixedPointCoordinate & input_coordinate, | ||||
|             FixedPointCoordinate & result_coordinate, | ||||
|             const unsigned zoom_level | ||||
|     ) { | ||||
|         bool ignore_tiny_components = (zoom_level <= 14); | ||||
|         DataT nearest_edge; | ||||
|         double min_dist = std::numeric_limits<double>::max(); | ||||
|         double min_max_dist = std::numeric_limits<double>::max(); | ||||
|         bool found_a_nearest_edge = false; | ||||
| 
 | ||||
|         //initialize queue with root element
 | ||||
|         std::priority_queue<QueryCandidate> traversal_queue; | ||||
|         double current_min_dist = m_search_tree[0].minimum_bounding_rectangle.GetMinDist(input_coordinate); | ||||
|         traversal_queue.push( | ||||
|             QueryCandidate(0, current_min_dist) | ||||
|         ); | ||||
| 
 | ||||
|         BOOST_ASSERT_MSG( | ||||
|             std::numeric_limits<double>::epsilon() > (0. - traversal_queue.top().min_dist), | ||||
|             "Root element in NN Search has min dist != 0." | ||||
|         ); | ||||
| 
 | ||||
|         while(!traversal_queue.empty()) { | ||||
|             const QueryCandidate current_query_node = traversal_queue.top(); | ||||
|             traversal_queue.pop(); | ||||
| 
 | ||||
|             const bool prune_downward = (current_query_node.min_dist >= min_max_dist); | ||||
|             const bool prune_upward = (current_query_node.min_dist >= min_dist); | ||||
|             if( !prune_downward && !prune_upward ) { //downward pruning
 | ||||
|                 TreeNode & current_tree_node = m_search_tree[current_query_node.node_id]; | ||||
|                 if (current_tree_node.child_is_on_disk) { | ||||
|                     LeafNode current_leaf_node; | ||||
|                     LoadLeafFromDisk( | ||||
|                         current_tree_node.children[0], | ||||
|                         current_leaf_node | ||||
|                     ); | ||||
|                     for(uint32_t i = 0; i < current_leaf_node.object_count; ++i) { | ||||
|                         const DataT & current_edge = current_leaf_node.objects[i]; | ||||
|                         if( | ||||
|                             ignore_tiny_components && | ||||
|                             current_edge.belongsToTinyComponent | ||||
|                         ) { | ||||
|                             continue; | ||||
|                         } | ||||
|                         if(current_edge.isIgnored()) { | ||||
|                             continue; | ||||
|                         } | ||||
| 
 | ||||
|                         double current_minimum_distance = ApproximateDistance( | ||||
|                                 input_coordinate.lat, | ||||
|                                 input_coordinate.lon, | ||||
|                                 current_edge.lat1, | ||||
|                                 current_edge.lon1 | ||||
|                             ); | ||||
|                         if( current_minimum_distance < min_dist ) { | ||||
|                             //found a new minimum
 | ||||
|                             min_dist = current_minimum_distance; | ||||
|                             result_coordinate.lat = current_edge.lat1; | ||||
|                             result_coordinate.lon = current_edge.lon1; | ||||
|                             found_a_nearest_edge = true; | ||||
|                         } | ||||
| 
 | ||||
|                         current_minimum_distance = ApproximateDistance( | ||||
|                                 input_coordinate.lat, | ||||
|                                 input_coordinate.lon, | ||||
|                                 current_edge.lat2, | ||||
|                                 current_edge.lon2 | ||||
|                             ); | ||||
| 
 | ||||
|                         if( current_minimum_distance < min_dist ) { | ||||
|                             //found a new minimum
 | ||||
|                             min_dist = current_minimum_distance; | ||||
|                             result_coordinate.lat = current_edge.lat2; | ||||
|                             result_coordinate.lon = current_edge.lon2; | ||||
|                             found_a_nearest_edge = true; | ||||
|                         } | ||||
|                     } | ||||
|                 } else { | ||||
|                     //traverse children, prune if global mindist is smaller than local one
 | ||||
|                     for (uint32_t i = 0; i < current_tree_node.child_count; ++i) { | ||||
|                         const int32_t child_id = current_tree_node.children[i]; | ||||
|                         const TreeNode & child_tree_node = m_search_tree[child_id]; | ||||
|                         const RectangleT & child_rectangle = child_tree_node.minimum_bounding_rectangle; | ||||
|                         const double current_min_dist = child_rectangle.GetMinDist(input_coordinate); | ||||
|                         const double current_min_max_dist = child_rectangle.GetMinMaxDist(input_coordinate); | ||||
|                         if( current_min_max_dist < min_max_dist ) { | ||||
|                             min_max_dist = current_min_max_dist; | ||||
|                         } | ||||
|                         if (current_min_dist > min_max_dist) { | ||||
|                             continue; | ||||
|                         } | ||||
|                         if (current_min_dist > min_dist) { //upward pruning
 | ||||
|                             continue; | ||||
|                         } | ||||
|                         traversal_queue.push( | ||||
|                             QueryCandidate(child_id, current_min_dist) | ||||
|                         ); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return found_a_nearest_edge; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     bool FindPhantomNodeForCoordinate( | ||||
|             const FixedPointCoordinate & input_coordinate, | ||||
|             PhantomNode & result_phantom_node, | ||||
| @ -607,8 +718,8 @@ public: | ||||
|         uint32_t io_count = 0; | ||||
|         uint32_t explored_tree_nodes_count = 0; | ||||
|         //SimpleLogger().Write() << "searching for coordinate " << input_coordinate;
 | ||||
|         double min_dist = DBL_MAX; | ||||
|         double min_max_dist = DBL_MAX; | ||||
|         double min_dist = std::numeric_limits<double>::max(); | ||||
|         double min_max_dist = std::numeric_limits<double>::max(); | ||||
|         bool found_a_nearest_edge = false; | ||||
| 
 | ||||
|         FixedPointCoordinate nearest, current_start_coordinate, current_end_coordinate; | ||||
| @ -621,8 +732,8 @@ public: | ||||
|         ); | ||||
| 
 | ||||
|         BOOST_ASSERT_MSG( | ||||
|                          FLT_EPSILON > (0. - traversal_queue.top().min_dist), | ||||
|                          "Root element in NN Search has min dist != 0." | ||||
|             std::numeric_limits<double>::epsilon() > (0. - traversal_queue.top().min_dist), | ||||
|             "Root element in NN Search has min dist != 0." | ||||
|         ); | ||||
| 
 | ||||
|         while(!traversal_queue.empty()) { | ||||
| @ -637,7 +748,6 @@ public: | ||||
|                     LeafNode current_leaf_node; | ||||
|                     LoadLeafFromDisk(current_tree_node.children[0], current_leaf_node); | ||||
|                     ++io_count; | ||||
|                     //SimpleLogger().Write() << "checking " << current_leaf_node.object_count << " elements";
 | ||||
|                     for(uint32_t i = 0; i < current_leaf_node.object_count; ++i) { | ||||
|                         DataT & current_edge = current_leaf_node.objects[i]; | ||||
|                         if(ignore_tiny_components && current_edge.belongsToTinyComponent) { | ||||
| @ -691,16 +801,14 @@ public: | ||||
|                                 current_end_coordinate | ||||
|                             ) | ||||
|                         ) { | ||||
| 
 | ||||
|                             BOOST_ASSERT_MSG(current_edge.id != result_phantom_node.edgeBasedNode, "IDs not different"); | ||||
|                             //SimpleLogger().Write() << "found bidirected edge on nodes " << current_edge.id << " and " << result_phantom_node.edgeBasedNode;
 | ||||
|                             result_phantom_node.weight2 = current_edge.weight; | ||||
|                             if(current_edge.id < result_phantom_node.edgeBasedNode) { | ||||
|                                 result_phantom_node.edgeBasedNode = current_edge.id; | ||||
|                                 std::swap(result_phantom_node.weight1, result_phantom_node.weight2); | ||||
|                                 std::swap(current_end_coordinate, current_start_coordinate); | ||||
|                             //    SimpleLogger().Write() <<"case 2";
 | ||||
|                             } | ||||
|                             //SimpleLogger().Write() << "w1: " << result_phantom_node.weight1 << ", w2: " << result_phantom_node.weight2;
 | ||||
|                         } | ||||
|                     } | ||||
|                 } else { | ||||
| @ -748,9 +856,13 @@ public: | ||||
|         return found_a_nearest_edge; | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     inline void LoadLeafFromDisk(const uint32_t leaf_id, LeafNode& result_node) { | ||||
|         if(!thread_local_rtree_stream.get() || !thread_local_rtree_stream->is_open()) { | ||||
|         if( | ||||
|             !thread_local_rtree_stream.get() || | ||||
|             !thread_local_rtree_stream->is_open() | ||||
|         ) { | ||||
|             thread_local_rtree_stream.reset( | ||||
|                 new boost::filesystem::ifstream( | ||||
|                         m_leaf_node_filename, | ||||
| @ -772,14 +884,14 @@ private: | ||||
|             const FixedPointCoordinate& source, | ||||
|             const FixedPointCoordinate& target, | ||||
|             FixedPointCoordinate& nearest, double *r) const { | ||||
|         const double x = static_cast<double>(inputPoint.lat); | ||||
|         const double y = static_cast<double>(inputPoint.lon); | ||||
|         const double a = static_cast<double>(source.lat); | ||||
|         const double b = static_cast<double>(source.lon); | ||||
|         const double c = static_cast<double>(target.lat); | ||||
|         const double d = static_cast<double>(target.lon); | ||||
|         const double x = inputPoint.lat/COORDINATE_PRECISION; | ||||
|         const double y = inputPoint.lon/COORDINATE_PRECISION; | ||||
|         const double a = source.lat/COORDINATE_PRECISION; | ||||
|         const double b = source.lon/COORDINATE_PRECISION; | ||||
|         const double c = target.lat/COORDINATE_PRECISION; | ||||
|         const double d = target.lon/COORDINATE_PRECISION; | ||||
|         double p,q,mX,nY; | ||||
|         if(fabs(a-c) > FLT_EPSILON){ | ||||
|         if(std::fabs(a-c) > std::numeric_limits<double>::epsilon() ){ | ||||
|             const double m = (d-b)/(c-a); // slope
 | ||||
|             // Projection of (x,y) on line joining (a,b) and (c,d)
 | ||||
|             p = ((x + (m*y)) + (m*m*a - m*b))/(1. + m*m); | ||||
| @ -809,8 +921,8 @@ private: | ||||
| //            return std::sqrt(((d - y)*(d - y) + (c - x)*(c - x)));
 | ||||
|         } | ||||
|         // point lies in between
 | ||||
|         nearest.lat = p; | ||||
|         nearest.lon = q; | ||||
|         nearest.lat = p*COORDINATE_PRECISION; | ||||
|         nearest.lon = q*COORDINATE_PRECISION; | ||||
| //        return std::sqrt((p-x)*(p-x) + (q-y)*(q-y));
 | ||||
|         return (p-x)*(p-x) + (q-y)*(q-y); | ||||
|     } | ||||
| @ -820,7 +932,7 @@ private: | ||||
|     } | ||||
| 
 | ||||
|     inline bool DoubleEpsilonCompare(const double d1, const double d2) const { | ||||
|         return (std::fabs(d1 - d2) < FLT_EPSILON); | ||||
|         return (std::fabs(d1 - d2) < std::numeric_limits<double>::epsilon() ); | ||||
|     } | ||||
| 
 | ||||
| }; | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef TURNINSTRUCTIONS_H_ | ||||
| #define TURNINSTRUCTIONS_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef FASTXORHASH_H_ | ||||
| #define FASTXORHASH_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef XORFASTHASHSTORAGE_H_ | ||||
| #define XORFASTHASHSTORAGE_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BASE_DESCRIPTOR_H_ | ||||
| #define BASE_DESCRIPTOR_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "DescriptionFactory.h" | ||||
| 
 | ||||
| @ -166,7 +173,7 @@ void DescriptionFactory::Run(const SearchEngine &sEngine, const unsigned zoomLev | ||||
|     //    SimpleLogger().Write() << "#segs: " << pathDescription.size();
 | ||||
| 
 | ||||
|     //Post-processing to remove empty or nearly empty path segments
 | ||||
|     if(FLT_EPSILON > pathDescription.back().length) { | ||||
|     if(std::numeric_limits<double>::epsilon() > pathDescription.back().length) { | ||||
|         //        SimpleLogger().Write() << "#segs: " << pathDescription.size() << ", last ratio: " << targetPhantom.ratio << ", length: " << pathDescription.back().length;
 | ||||
|         if(pathDescription.size() > 2){ | ||||
|             pathDescription.pop_back(); | ||||
| @ -178,7 +185,7 @@ void DescriptionFactory::Run(const SearchEngine &sEngine, const unsigned zoomLev | ||||
|     } else { | ||||
|         pathDescription[indexOfSegmentBegin].duration *= (1.-targetPhantom.ratio); | ||||
|     } | ||||
|     if(FLT_EPSILON > pathDescription[0].length) { | ||||
|     if(std::numeric_limits<double>::epsilon() > pathDescription[0].length) { | ||||
|         //TODO: this is never called actually?
 | ||||
|         if(pathDescription.size() > 2) { | ||||
|             pathDescription.erase(pathDescription.begin()); | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef DESCRIPTIONFACTORY_H_ | ||||
| #define DESCRIPTIONFACTORY_H_ | ||||
| @ -30,6 +37,7 @@ | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../typedefs.h" | ||||
| 
 | ||||
| #include <limits> | ||||
| #include <vector> | ||||
| 
 | ||||
| /* This class is fed with all way segments in consecutive order
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef GPX_DESCRIPTOR_H_ | ||||
| #define GPX_DESCRIPTOR_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef JSON_DESCRIPTOR_H_ | ||||
| #define JSON_DESCRIPTOR_H_ | ||||
|  | ||||
| @ -1,21 +1,28 @@ | ||||
| /*
 | ||||
| open source routing machine | ||||
| Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
| */ | ||||
| 
 | ||||
| #include "BaseParser.h" | ||||
| @ -72,13 +79,10 @@ void BaseParser::ParseNodeInLua(ImportNode& n, lua_State* localLuaState) { | ||||
| } | ||||
| 
 | ||||
| void BaseParser::ParseWayInLua(ExtractionWay& w, lua_State* localLuaState) { | ||||
|     if(2 > w.path.size()) { | ||||
|         return; | ||||
|     } | ||||
|     luabind::call_function<void>( localLuaState, "way_function", boost::ref(w) ); | ||||
| } | ||||
| 
 | ||||
| bool BaseParser::ShouldIgnoreRestriction(const std::string& except_tag_string) const { | ||||
| bool BaseParser::ShouldIgnoreRestriction(const std::string & except_tag_string) const { | ||||
|     //should this restriction be ignored? yes if there's an overlap between:
 | ||||
|     //a) the list of modes in the except tag of the restriction (except_tag_string), ex: except=bus;bicycle
 | ||||
|     //b) the lua profile defines a hierachy of modes, ex: [access, vehicle, bicycle]
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BASEPARSER_H_ | ||||
| #define BASEPARSER_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "ExtractionContainers.h" | ||||
| 
 | ||||
| @ -111,7 +118,10 @@ void ExtractionContainers::PrepareData(const std::string & output_file_name, con | ||||
|                 restrictionsIT->restriction.toNode = wayStartAndEndEdgeIT->firstStart; | ||||
|             } | ||||
| 
 | ||||
|             if(UINT_MAX != restrictionsIT->restriction.fromNode && UINT_MAX != restrictionsIT->restriction.toNode) { | ||||
|             if( | ||||
|                 UINT_MAX != restrictionsIT->restriction.fromNode && | ||||
|                 UINT_MAX != restrictionsIT->restriction.toNode | ||||
|             ) { | ||||
|                 ++usableRestrictionsCounter; | ||||
|             } | ||||
|             ++restrictionsIT; | ||||
| @ -123,8 +133,15 @@ void ExtractionContainers::PrepareData(const std::string & output_file_name, con | ||||
|         restrictionsOutstream.open(restrictionsFileName.c_str(), std::ios::binary); | ||||
|         restrictionsOutstream.write((char*)&uuid, sizeof(UUID)); | ||||
|         restrictionsOutstream.write((char*)&usableRestrictionsCounter, sizeof(unsigned)); | ||||
|         for(restrictionsIT = restrictionsVector.begin(); restrictionsIT != restrictionsVector.end(); ++restrictionsIT) { | ||||
|             if(UINT_MAX != restrictionsIT->restriction.fromNode && UINT_MAX != restrictionsIT->restriction.toNode) { | ||||
|         for( | ||||
|             restrictionsIT = restrictionsVector.begin(); | ||||
|             restrictionsIT != restrictionsVector.end(); | ||||
|             ++restrictionsIT | ||||
|         ) { | ||||
|             if( | ||||
|                 UINT_MAX != restrictionsIT->restriction.fromNode && | ||||
|                 UINT_MAX != restrictionsIT->restriction.toNode | ||||
|             ) { | ||||
|                 restrictionsOutstream.write((char *)&(restrictionsIT->restriction), sizeof(TurnRestriction)); | ||||
|             } | ||||
|         } | ||||
| @ -272,37 +289,43 @@ void ExtractionContainers::PrepareData(const std::string & output_file_name, con | ||||
|         fout.close(); | ||||
|         std::cout << "ok" << std::endl; | ||||
|         time = get_timestamp(); | ||||
|         std::cout << "[extractor] writing street name index ... " << std::flush; | ||||
|         std::string nameOutFileName = (output_file_name + ".names"); | ||||
|         std::ofstream nameOutFile(nameOutFileName.c_str(), std::ios::binary); | ||||
|         unsigned sizeOfNameIndex = nameVector.size(); | ||||
|         nameOutFile.write((char *)&(sizeOfNameIndex), sizeof(unsigned)); | ||||
| 
 | ||||
|         BOOST_FOREACH(const std::string & str, nameVector) { | ||||
|             unsigned lengthOfRawString = strlen(str.c_str()); | ||||
|             nameOutFile.write((char *)&(lengthOfRawString), sizeof(unsigned)); | ||||
|             nameOutFile.write(str.c_str(), lengthOfRawString); | ||||
|         std::cout << "[extractor] writing street name index ... " << std::flush; | ||||
|         std::string name_file_streamName = (output_file_name + ".names"); | ||||
|         boost::filesystem::ofstream name_file_stream( | ||||
|             name_file_streamName, | ||||
|             std::ios::binary | ||||
|         ); | ||||
| 
 | ||||
|         const unsigned number_of_ways = name_list.size()+1; | ||||
|         name_file_stream.write((char *)&(number_of_ways), sizeof(unsigned)); | ||||
|         unsigned name_lengths_prefix_sum = 0; | ||||
|         BOOST_FOREACH(const std::string & str, name_list) { | ||||
|             name_file_stream.write( | ||||
|                 (char *)&(name_lengths_prefix_sum), | ||||
|                 sizeof(unsigned) | ||||
|             ); | ||||
|             name_lengths_prefix_sum += strlen(str.c_str()); | ||||
|         } | ||||
|         name_file_stream.write( | ||||
|             (char *)&(name_lengths_prefix_sum), | ||||
|             sizeof(unsigned) | ||||
|         ); | ||||
|         //duplicate on purpose!
 | ||||
|         name_file_stream.write((char *)&(name_lengths_prefix_sum), sizeof(unsigned)); | ||||
|         BOOST_FOREACH(const std::string & str, name_list) { | ||||
|             const unsigned lengthOfRawString = strlen(str.c_str()); | ||||
|             name_file_stream.write(str.c_str(), lengthOfRawString); | ||||
|         } | ||||
| 
 | ||||
|         nameOutFile.close(); | ||||
|         name_file_stream.close(); | ||||
|         std::cout << "ok, after " << get_timestamp() - time << "s" << std::endl; | ||||
| 
 | ||||
|         //        time = get_timestamp();
 | ||||
|         //        cout << "[extractor] writing address list      ... " << flush;
 | ||||
|         //
 | ||||
|         //        adressFileName.append(".address");
 | ||||
|         //        ofstream addressOutFile(adressFileName.c_str());
 | ||||
|         //        for(STXXLAddressVector::iterator it = adressVector.begin(); it != adressVector.end(); it++) {
 | ||||
|         //            addressOutFile << it->node.id << "|" << it->node.lat << "|" << it->node.lon << "|" << it->city << "|" << it->street << "|" << it->housenumber << "|" << it->state << "|" << it->country << "\n";
 | ||||
|         //        }
 | ||||
|         //        addressOutFile.close();
 | ||||
|         //        cout << "ok, after " << get_timestamp() - time << "s" << endl;
 | ||||
| 
 | ||||
|         SimpleLogger().Write() << "Processed " << usedNodeCounter << " nodes and " << usedEdgeCounter << " edges"; | ||||
|         SimpleLogger().Write() << | ||||
|             "Processed " << usedNodeCounter << " nodes and " << usedEdgeCounter << " edges"; | ||||
| 
 | ||||
| 
 | ||||
|     } catch ( const std::exception& e ) { | ||||
|       std::cerr <<  "Caught Execption:" << e.what() << std::endl; | ||||
|         std::cerr <<  "Caught Execption:" << e.what() << std::endl; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef EXTRACTIONCONTAINERS_H_ | ||||
| #define EXTRACTIONCONTAINERS_H_ | ||||
| @ -27,41 +34,48 @@ | ||||
| #include "../Util/UUID.h" | ||||
| 
 | ||||
| #include <boost/foreach.hpp> | ||||
| #include <boost/filesystem.hpp> | ||||
| #include <boost/filesystem/fstream.hpp> | ||||
| #include <stxxl.h> | ||||
| 
 | ||||
| class ExtractionContainers { | ||||
| public: | ||||
|     typedef stxxl::vector<NodeID> STXXLNodeIDVector; | ||||
|     typedef stxxl::vector<_Node> STXXLNodeVector; | ||||
|     typedef stxxl::vector<InternalExtractorEdge> STXXLEdgeVector; | ||||
|     typedef stxxl::vector<std::string> STXXLStringVector; | ||||
|     typedef stxxl::vector<NodeID>                   STXXLNodeIDVector; | ||||
|     typedef stxxl::vector<_Node>                    STXXLNodeVector; | ||||
|     typedef stxxl::vector<InternalExtractorEdge>    STXXLEdgeVector; | ||||
|     typedef stxxl::vector<std::string>              STXXLStringVector; | ||||
|     typedef stxxl::vector<_RawRestrictionContainer> STXXLRestrictionsVector; | ||||
|     typedef stxxl::vector<_WayIDStartAndEndEdge> STXXLWayIDStartEndVector; | ||||
|     typedef stxxl::vector<_WayIDStartAndEndEdge>    STXXLWayIDStartEndVector; | ||||
| 
 | ||||
| 
 | ||||
|     STXXLNodeIDVector                               usedNodeIDs; | ||||
|     STXXLNodeVector                                 allNodes; | ||||
|     STXXLEdgeVector                                 allEdges; | ||||
|     STXXLStringVector                               name_list; | ||||
|     STXXLRestrictionsVector                         restrictionsVector; | ||||
|     STXXLWayIDStartEndVector                        wayStartEndVector; | ||||
|     const UUID uuid; | ||||
| 
 | ||||
|     ExtractionContainers() { | ||||
|         //Check if another instance of stxxl is already running or if there is a general problem
 | ||||
|         stxxl::vector<unsigned> testForRunningInstance; | ||||
|         nameVector.push_back(""); | ||||
|         name_list.push_back(""); | ||||
|     } | ||||
| 
 | ||||
|     virtual ~ExtractionContainers() { | ||||
|         usedNodeIDs.clear(); | ||||
|         allNodes.clear(); | ||||
|         allEdges.clear(); | ||||
|         nameVector.clear(); | ||||
|         name_list.clear(); | ||||
|         restrictionsVector.clear(); | ||||
|         wayStartEndVector.clear(); | ||||
|     } | ||||
| 
 | ||||
|     void PrepareData( const std::string & output_file_name, const std::string restrictionsFileName, const unsigned amountOfRAM); | ||||
| 
 | ||||
|     STXXLNodeIDVector           usedNodeIDs; | ||||
|     STXXLNodeVector             allNodes; | ||||
|     STXXLEdgeVector             allEdges; | ||||
|     STXXLStringVector           nameVector; | ||||
|     STXXLRestrictionsVector     restrictionsVector; | ||||
|     STXXLWayIDStartEndVector    wayStartEndVector; | ||||
|     const UUID uuid; | ||||
|     void PrepareData( | ||||
|         const std::string & output_file_name, | ||||
|         const std::string restrictionsFileName, | ||||
|         const unsigned amountOfRAM | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| #endif /* EXTRACTIONCONTAINERS_H_ */ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef EXTRACTIONHELPERFUNCTIONS_H_ | ||||
| #define EXTRACTIONHELPERFUNCTIONS_H_ | ||||
|  | ||||
| @ -1,23 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "ExtractorCallbacks.h" | ||||
| 
 | ||||
| @ -56,7 +62,7 @@ void ExtractorCallbacks::wayFunction(ExtractionWay &parsed_way) { | ||||
|             parsed_way.speed = parsed_way.duration/(parsed_way.path.size()-1); | ||||
|         } | ||||
| 
 | ||||
|         if(FLT_EPSILON >= fabs(-1. - parsed_way.speed)){ | ||||
|         if(std::numeric_limits<double>::epsilon() >= fabs(-1. - parsed_way.speed)){ | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "found way with bogus speed, id: " << parsed_way.id; | ||||
|             return; | ||||
| @ -65,8 +71,8 @@ void ExtractorCallbacks::wayFunction(ExtractionWay &parsed_way) { | ||||
|         //Get the unique identifier for the street name
 | ||||
|         const StringMap::const_iterator string_map_iterator = stringMap->find(parsed_way.name); | ||||
|         if(stringMap->end() == string_map_iterator) { | ||||
|             parsed_way.nameID = externalMemory->nameVector.size(); | ||||
|             externalMemory->nameVector.push_back(parsed_way.name); | ||||
|             parsed_way.nameID = externalMemory->name_list.size(); | ||||
|             externalMemory->name_list.push_back(parsed_way.name); | ||||
|             stringMap->insert(std::make_pair(parsed_way.name, parsed_way.nameID)); | ||||
|         } else { | ||||
|             parsed_way.nameID = string_map_iterator->second; | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef EXTRACTORCALLBACKS_H_ | ||||
| #define EXTRACTORCALLBACKS_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef EXTRACTORSTRUCTS_H_ | ||||
| #define EXTRACTORSTRUCTS_H_ | ||||
| @ -154,7 +161,7 @@ struct CmpWayByID : public std::binary_function<_WayIDStartAndEndEdge, _WayIDSta | ||||
| 
 | ||||
| struct Cmp : public std::binary_function<NodeID, NodeID, bool> { | ||||
|     typedef NodeID value_type; | ||||
|     bool operator ()  (const NodeID & a, const NodeID & b) const { | ||||
|     bool operator ()  (const NodeID a, const NodeID b) const { | ||||
|         return a < b; | ||||
|     } | ||||
|     value_type max_value() { | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "PBFParser.h" | ||||
| 
 | ||||
| @ -173,14 +180,14 @@ inline void PBFParser::parseDenseNode(_ThreadData * threadData) { | ||||
| 		extracted_nodes_vector[i].lon = COORDINATE_PRECISION*( ( double ) m_lastDenseLongitude * threadData->PBFprimitiveBlock.granularity() + threadData->PBFprimitiveBlock.lon_offset() ) / NANO; | ||||
| 		while (denseTagIndex < dense.keys_vals_size()) { | ||||
| 			const int tagValue = dense.keys_vals( denseTagIndex ); | ||||
| 			if( 0==tagValue ) { | ||||
| 			if( 0 == tagValue ) { | ||||
| 				++denseTagIndex; | ||||
| 				break; | ||||
| 			} | ||||
| 			const int keyValue = dense.keys_vals ( denseTagIndex+1 ); | ||||
| 			const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(tagValue).data(); | ||||
| 			const std::string & value = threadData->PBFprimitiveBlock.stringtable().s(keyValue).data(); | ||||
| 			extracted_nodes_vector[i].keyVals.insert(std::make_pair(key, value)); | ||||
| 			const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(tagValue); | ||||
| 			const std::string & value = threadData->PBFprimitiveBlock.stringtable().s(keyValue); | ||||
| 			extracted_nodes_vector[i].keyVals.emplace(key, value); | ||||
| 			denseTagIndex += 2; | ||||
| 		} | ||||
| 	} | ||||
| @ -191,7 +198,7 @@ inline void PBFParser::parseDenseNode(_ThreadData * threadData) { | ||||
| 	    ParseNodeInLua( n, scriptingEnvironment.getLuaStateForThreadID(omp_get_thread_num()) ); | ||||
| 	} | ||||
| 
 | ||||
| 	BOOST_FOREACH(ImportNode &n, extracted_nodes_vector) { | ||||
| 	BOOST_FOREACH(const ImportNode &n, extracted_nodes_vector) { | ||||
| 	    extractor_callbacks->nodeFunction(n); | ||||
| 	} | ||||
| } | ||||
| @ -209,7 +216,8 @@ inline void PBFParser::parseRelation(_ThreadData * threadData) { | ||||
| 		return; | ||||
| 	} | ||||
| 	const OSMPBF::PrimitiveGroup& group = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID ); | ||||
| 	for(int i = 0; i < group.relations_size(); ++i ) { | ||||
| 
 | ||||
| 	for(int i = 0, relation_size = group.relations_size(); i < relation_size; ++i ) { | ||||
| 		std::string except_tag_string; | ||||
| 		const OSMPBF::Relation& inputRelation = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID ).relations(i); | ||||
| 		bool isRestriction = false; | ||||
| @ -241,8 +249,12 @@ inline void PBFParser::parseRelation(_ThreadData * threadData) { | ||||
| 		if(isRestriction) { | ||||
| 			int64_t lastRef = 0; | ||||
| 			_RawRestrictionContainer currentRestrictionContainer(isOnlyRestriction); | ||||
| 			for(int rolesIndex = 0; rolesIndex < inputRelation.roles_sid_size(); ++rolesIndex) { | ||||
| 				std::string role(threadData->PBFprimitiveBlock.stringtable().s( inputRelation.roles_sid( rolesIndex ) ).data()); | ||||
| 			for( | ||||
| 				int rolesIndex = 0, last_role =  inputRelation.roles_sid_size(); | ||||
| 				rolesIndex < last_role; | ||||
| 				++rolesIndex | ||||
| 			) { | ||||
| 				const std::string & role = threadData->PBFprimitiveBlock.stringtable().s( inputRelation.roles_sid( rolesIndex ) ); | ||||
| 				lastRef += inputRelation.memids(rolesIndex); | ||||
| 
 | ||||
| 				if(!("from" == role || "to" == role || "via" == role)) { | ||||
| @ -280,7 +292,6 @@ inline void PBFParser::parseRelation(_ThreadData * threadData) { | ||||
| 					break; | ||||
| 
 | ||||
| 				default: //should not happen
 | ||||
| 					//cout << "unknown";
 | ||||
| 					assert(false); | ||||
| 					break; | ||||
| 				} | ||||
| @ -309,17 +320,23 @@ inline void PBFParser::parseWay(_ThreadData * threadData) { | ||||
| 		for(int j = 0; j < number_of_keys; ++j) { | ||||
| 			const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(inputWay.keys(j)); | ||||
| 			const std::string & val = threadData->PBFprimitiveBlock.stringtable().s(inputWay.vals(j)); | ||||
| 			parsed_way_vector[i].keyVals.insert(std::make_pair(key, val)); | ||||
| 			parsed_way_vector[i].keyVals.emplace(key, val); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| #pragma omp parallel for schedule ( guided ) | ||||
| 	for(int i = 0; i < number_of_ways; ++i) { | ||||
| 	    ExtractionWay & w = parsed_way_vector[i]; | ||||
| 	    ParseWayInLua( w, scriptingEnvironment.getLuaStateForThreadID(omp_get_thread_num()) ); | ||||
| 		if(2 > w.path.size()) { | ||||
|         	continue; | ||||
|     	} | ||||
| 	    ParseWayInLua( w, scriptingEnvironment.getLuaStateForThreadID( omp_get_thread_num()) ); | ||||
| 	} | ||||
| 
 | ||||
| 	BOOST_FOREACH(ExtractionWay & w, parsed_way_vector) { | ||||
| 		if(2 > w.path.size()) { | ||||
|         	continue; | ||||
|     	} | ||||
| 	    extractor_callbacks->wayFunction(w); | ||||
| 	} | ||||
| } | ||||
| @ -330,21 +347,21 @@ inline void PBFParser::loadGroup(_ThreadData * threadData) { | ||||
| #endif | ||||
| 
 | ||||
| 	const OSMPBF::PrimitiveGroup& group = threadData->PBFprimitiveBlock.primitivegroup( threadData->currentGroupID ); | ||||
| 	threadData->entityTypeIndicator = 0; | ||||
| 	if ( group.nodes_size() != 0 ) { | ||||
| 	threadData->entityTypeIndicator = TypeDummy; | ||||
| 	if ( 0 != group.nodes_size() ) { | ||||
| 		threadData->entityTypeIndicator = TypeNode; | ||||
| 	} | ||||
| 	if ( group.ways_size() != 0 ) { | ||||
| 	if ( 0 != group.ways_size() ) { | ||||
| 		threadData->entityTypeIndicator = TypeWay; | ||||
| 	} | ||||
| 	if ( group.relations_size() != 0 ) { | ||||
| 	if ( 0 != group.relations_size() ) { | ||||
| 		threadData->entityTypeIndicator = TypeRelation; | ||||
| 	} | ||||
| 	if ( group.has_dense() )  { | ||||
| 		threadData->entityTypeIndicator = TypeDenseNode; | ||||
| 		assert( group.dense().id_size() != 0 ); | ||||
| 		assert( 0 != group.dense().id_size() ); | ||||
| 	} | ||||
| 	assert( threadData->entityTypeIndicator != 0 ); | ||||
| 	assert( threadData->entityTypeIndicator != TypeDummy ); | ||||
| } | ||||
| 
 | ||||
| inline void PBFParser::loadBlock(_ThreadData * threadData) { | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef PBFPARSER_H_ | ||||
| #define PBFPARSER_H_ | ||||
| @ -44,16 +51,17 @@ | ||||
| class PBFParser : public BaseParser { | ||||
| 
 | ||||
|     enum EntityType { | ||||
|         TypeNode = 1, | ||||
|         TypeWay = 2, | ||||
|         TypeRelation = 4, | ||||
|         TypeDummy     = 0, | ||||
|         TypeNode      = 1, | ||||
|         TypeWay       = 2, | ||||
|         TypeRelation  = 4, | ||||
|         TypeDenseNode = 8 | ||||
|     } ; | ||||
|     }; | ||||
| 
 | ||||
|     struct _ThreadData { | ||||
|         int currentGroupID; | ||||
|         int currentEntityID; | ||||
|         short entityTypeIndicator; | ||||
|         EntityType entityTypeIndicator; | ||||
| 
 | ||||
|         OSMPBF::BlobHeader PBFBlobHeader; | ||||
|         OSMPBF::Blob PBFBlob; | ||||
| @ -74,18 +82,18 @@ public: | ||||
| private: | ||||
|     inline void ReadData(); | ||||
|     inline void ParseData(); | ||||
|     inline void parseDenseNode(_ThreadData * threadData); | ||||
|     inline void parseNode(_ThreadData * ); | ||||
|     inline void parseRelation(_ThreadData * threadData); | ||||
|     inline void parseWay(_ThreadData * threadData); | ||||
|     inline void parseDenseNode  (_ThreadData * threadData); | ||||
|     inline void parseNode       (_ThreadData * threadData); | ||||
|     inline void parseRelation   (_ThreadData * threadData); | ||||
|     inline void parseWay        (_ThreadData * threadData); | ||||
| 
 | ||||
|     inline void loadGroup(_ThreadData * threadData); | ||||
|     inline void loadBlock(_ThreadData * threadData); | ||||
|     inline bool readPBFBlobHeader(std::fstream& stream, _ThreadData * threadData); | ||||
|     inline bool unpackZLIB(std::fstream &, _ThreadData * threadData); | ||||
|     inline bool unpackLZMA(std::fstream &, _ThreadData * ); | ||||
|     inline bool readBlob(std::fstream& stream, _ThreadData * threadData) ; | ||||
|     inline bool readNextBlock(std::fstream& stream, _ThreadData * threadData); | ||||
|     inline void loadGroup       (_ThreadData * threadData); | ||||
|     inline void loadBlock       (_ThreadData * threadData); | ||||
|     inline bool readPBFBlobHeader(std::fstream & stream, _ThreadData * threadData); | ||||
|     inline bool unpackZLIB       (std::fstream & stream, _ThreadData * threadData); | ||||
|     inline bool unpackLZMA       (std::fstream & stream, _ThreadData * threadData); | ||||
|     inline bool readBlob         (std::fstream & stream, _ThreadData * threadData); | ||||
|     inline bool readNextBlock    (std::fstream & stream, _ThreadData * threadData); | ||||
| 
 | ||||
|     static const int NANO = 1000 * 1000 * 1000; | ||||
|     static const int MAX_BLOB_HEADER_SIZE = 64 * 1024; | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "ScriptingEnvironment.h" | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SCRIPTINGENVIRONMENT_H_ | ||||
| #define SCRIPTINGENVIRONMENT_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "XMLParser.h" | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|  open source routing machine | ||||
|  Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU AFFERO General Public License as published by | ||||
|  the Free Software Foundation; either version 3 of the License, or | ||||
|  any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
|  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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
|  You should have received a copy of the GNU Affero General Public License | ||||
|  along with this program; if not, write to the Free Software | ||||
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef XMLPARSER_H_ | ||||
| #define XMLPARSER_H_ | ||||
|  | ||||
							
								
								
									
										30
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								Gemfile.lock
									
									
									
									
									
								
							| @ -1,23 +1,23 @@ | ||||
| GEM | ||||
|   remote: http://rubygems.org/ | ||||
|   specs: | ||||
|     builder (3.0.0) | ||||
|     cucumber (1.1.4) | ||||
|     builder (3.2.2) | ||||
|     cucumber (1.3.8) | ||||
|       builder (>= 2.1.2) | ||||
|       diff-lcs (>= 1.1.2) | ||||
|       gherkin (~> 2.7.1) | ||||
|       json (>= 1.4.6) | ||||
|       term-ansicolor (>= 1.0.6) | ||||
|     diff-lcs (1.1.3) | ||||
|     gherkin (2.7.6) | ||||
|       json (>= 1.4.6) | ||||
|     json (1.6.5) | ||||
|       diff-lcs (>= 1.1.3) | ||||
|       gherkin (~> 2.12.1) | ||||
|       multi_json (>= 1.7.5, < 2.0) | ||||
|       multi_test (>= 0.0.2) | ||||
|     diff-lcs (1.2.4) | ||||
|     gherkin (2.12.1) | ||||
|       multi_json (~> 1.3) | ||||
|     multi_json (1.8.0) | ||||
|     multi_test (0.0.2) | ||||
|     osmlib-base (0.1.4) | ||||
|     rake (0.9.2.2) | ||||
|     rspec-expectations (2.11.3) | ||||
|       diff-lcs (~> 1.1.3) | ||||
|     sys-proctable (0.9.1) | ||||
|     term-ansicolor (1.0.7) | ||||
|     rake (10.1.0) | ||||
|     rspec-expectations (2.14.3) | ||||
|       diff-lcs (>= 1.1.3, < 2.0) | ||||
|     sys-proctable (0.9.3) | ||||
| 
 | ||||
| PLATFORMS | ||||
|   ruby | ||||
|  | ||||
							
								
								
									
										683
									
								
								LICENCE.TXT
									
									
									
									
									
								
							
							
						
						
									
										683
									
								
								LICENCE.TXT
									
									
									
									
									
								
							| @ -1,661 +1,22 @@ | ||||
|                     GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|                        Version 3, 19 November 2007 | ||||
| 
 | ||||
|  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
| 
 | ||||
|                             Preamble | ||||
| 
 | ||||
|   The GNU Affero General Public License is a free, copyleft license for | ||||
| software and other kinds of works, specifically designed to ensure | ||||
| cooperation with the community in the case of network server software. | ||||
| 
 | ||||
|   The licenses for most software and other practical works are designed | ||||
| to take away your freedom to share and change the works.  By contrast, | ||||
| our General Public Licenses are intended to guarantee your freedom to | ||||
| share and change all versions of a program--to make sure it remains free | ||||
| software for all its users. | ||||
| 
 | ||||
|   When we speak of free software, we are referring to freedom, 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 | ||||
| them if you wish), that you receive source code or can get it if you | ||||
| want it, that you can change the software or use pieces of it in new | ||||
| free programs, and that you know you can do these things. | ||||
| 
 | ||||
|   Developers that use our General Public Licenses protect your rights | ||||
| with two steps: (1) assert copyright on the software, and (2) offer | ||||
| you this License which gives you legal permission to copy, distribute | ||||
| and/or modify the software. | ||||
| 
 | ||||
|   A secondary benefit of defending all users' freedom is that | ||||
| improvements made in alternate versions of the program, if they | ||||
| receive widespread use, become available for other developers to | ||||
| incorporate.  Many developers of free software are heartened and | ||||
| encouraged by the resulting cooperation.  However, in the case of | ||||
| software used on network servers, this result may fail to come about. | ||||
| The GNU General Public License permits making a modified version and | ||||
| letting the public access it on a server without ever releasing its | ||||
| source code to the public. | ||||
| 
 | ||||
|   The GNU Affero General Public License is designed specifically to | ||||
| ensure that, in such cases, the modified source code becomes available | ||||
| to the community.  It requires the operator of a network server to | ||||
| provide the source code of the modified version running there to the | ||||
| users of that server.  Therefore, public use of a modified version, on | ||||
| a publicly accessible server, gives the public access to the source | ||||
| code of the modified version. | ||||
| 
 | ||||
|   An older license, called the Affero General Public License and | ||||
| published by Affero, was designed to accomplish similar goals.  This is | ||||
| a different license, not a version of the Affero GPL, but Affero has | ||||
| released a new version of the Affero GPL which permits relicensing under | ||||
| this license. | ||||
| 
 | ||||
|   The precise terms and conditions for copying, distribution and | ||||
| modification follow. | ||||
| 
 | ||||
|                        TERMS AND CONDITIONS | ||||
| 
 | ||||
|   0. Definitions. | ||||
| 
 | ||||
|   "This License" refers to version 3 of the GNU Affero General Public License. | ||||
| 
 | ||||
|   "Copyright" also means copyright-like laws that apply to other kinds of | ||||
| works, such as semiconductor masks. | ||||
| 
 | ||||
|   "The Program" refers to any copyrightable work licensed under this | ||||
| License.  Each licensee is addressed as "you".  "Licensees" and | ||||
| "recipients" may be individuals or organizations. | ||||
| 
 | ||||
|   To "modify" a work means to copy from or adapt all or part of the work | ||||
| in a fashion requiring copyright permission, other than the making of an | ||||
| exact copy.  The resulting work is called a "modified version" of the | ||||
| earlier work or a work "based on" the earlier work. | ||||
| 
 | ||||
|   A "covered work" means either the unmodified Program or a work based | ||||
| on the Program. | ||||
| 
 | ||||
|   To "propagate" a work means to do anything with it that, without | ||||
| permission, would make you directly or secondarily liable for | ||||
| infringement under applicable copyright law, except executing it on a | ||||
| computer or modifying a private copy.  Propagation includes copying, | ||||
| distribution (with or without modification), making available to the | ||||
| public, and in some countries other activities as well. | ||||
| 
 | ||||
|   To "convey" a work means any kind of propagation that enables other | ||||
| parties to make or receive copies.  Mere interaction with a user through | ||||
| a computer network, with no transfer of a copy, is not conveying. | ||||
| 
 | ||||
|   An interactive user interface displays "Appropriate Legal Notices" | ||||
| to the extent that it includes a convenient and prominently visible | ||||
| feature that (1) displays an appropriate copyright notice, and (2) | ||||
| tells the user that there is no warranty for the work (except to the | ||||
| extent that warranties are provided), that licensees may convey the | ||||
| work under this License, and how to view a copy of this License.  If | ||||
| the interface presents a list of user commands or options, such as a | ||||
| menu, a prominent item in the list meets this criterion. | ||||
| 
 | ||||
|   1. Source Code. | ||||
| 
 | ||||
|   The "source code" for a work means the preferred form of the work | ||||
| for making modifications to it.  "Object code" means any non-source | ||||
| form of a work. | ||||
| 
 | ||||
|   A "Standard Interface" means an interface that either is an official | ||||
| standard defined by a recognized standards body, or, in the case of | ||||
| interfaces specified for a particular programming language, one that | ||||
| is widely used among developers working in that language. | ||||
| 
 | ||||
|   The "System Libraries" of an executable work include anything, other | ||||
| than the work as a whole, that (a) is included in the normal form of | ||||
| packaging a Major Component, but which is not part of that Major | ||||
| Component, and (b) serves only to enable use of the work with that | ||||
| Major Component, or to implement a Standard Interface for which an | ||||
| implementation is available to the public in source code form.  A | ||||
| "Major Component", in this context, means a major essential component | ||||
| (kernel, window system, and so on) of the specific operating system | ||||
| (if any) on which the executable work runs, or a compiler used to | ||||
| produce the work, or an object code interpreter used to run it. | ||||
| 
 | ||||
|   The "Corresponding Source" for a work in object code form means all | ||||
| the source code needed to generate, install, and (for an executable | ||||
| work) run the object code and to modify the work, including scripts to | ||||
| control those activities.  However, it does not include the work's | ||||
| System Libraries, or general-purpose tools or generally available free | ||||
| programs which are used unmodified in performing those activities but | ||||
| which are not part of the work.  For example, Corresponding Source | ||||
| includes interface definition files associated with source files for | ||||
| the work, and the source code for shared libraries and dynamically | ||||
| linked subprograms that the work is specifically designed to require, | ||||
| such as by intimate data communication or control flow between those | ||||
| subprograms and other parts of the work. | ||||
| 
 | ||||
|   The Corresponding Source need not include anything that users | ||||
| can regenerate automatically from other parts of the Corresponding | ||||
| Source. | ||||
| 
 | ||||
|   The Corresponding Source for a work in source code form is that | ||||
| same work. | ||||
| 
 | ||||
|   2. Basic Permissions. | ||||
| 
 | ||||
|   All rights granted under this License are granted for the term of | ||||
| copyright on the Program, and are irrevocable provided the stated | ||||
| conditions are met.  This License explicitly affirms your unlimited | ||||
| permission to run the unmodified Program.  The output from running a | ||||
| covered work is covered by this License only if the output, given its | ||||
| content, constitutes a covered work.  This License acknowledges your | ||||
| rights of fair use or other equivalent, as provided by copyright law. | ||||
| 
 | ||||
|   You may make, run and propagate covered works that you do not | ||||
| convey, without conditions so long as your license otherwise remains | ||||
| in force.  You may convey covered works to others for the sole purpose | ||||
| of having them make modifications exclusively for you, or provide you | ||||
| with facilities for running those works, provided that you comply with | ||||
| the terms of this License in conveying all material for which you do | ||||
| not control copyright.  Those thus making or running the covered works | ||||
| for you must do so exclusively on your behalf, under your direction | ||||
| and control, on terms that prohibit them from making any copies of | ||||
| your copyrighted material outside their relationship with you. | ||||
| 
 | ||||
|   Conveying under any other circumstances is permitted solely under | ||||
| the conditions stated below.  Sublicensing is not allowed; section 10 | ||||
| makes it unnecessary. | ||||
| 
 | ||||
|   3. Protecting Users' Legal Rights From Anti-Circumvention Law. | ||||
| 
 | ||||
|   No covered work shall be deemed part of an effective technological | ||||
| measure under any applicable law fulfilling obligations under article | ||||
| 11 of the WIPO copyright treaty adopted on 20 December 1996, or | ||||
| similar laws prohibiting or restricting circumvention of such | ||||
| measures. | ||||
| 
 | ||||
|   When you convey a covered work, you waive any legal power to forbid | ||||
| circumvention of technological measures to the extent such circumvention | ||||
| is effected by exercising rights under this License with respect to | ||||
| the covered work, and you disclaim any intention to limit operation or | ||||
| modification of the work as a means of enforcing, against the work's | ||||
| users, your or third parties' legal rights to forbid circumvention of | ||||
| technological measures. | ||||
| 
 | ||||
|   4. Conveying Verbatim Copies. | ||||
| 
 | ||||
|   You may convey verbatim copies of the Program's source code as you | ||||
| receive it, in any medium, provided that you conspicuously and | ||||
| appropriately publish on each copy an appropriate copyright notice; | ||||
| keep intact all notices stating that this License and any | ||||
| non-permissive terms added in accord with section 7 apply to the code; | ||||
| keep intact all notices of the absence of any warranty; and give all | ||||
| recipients a copy of this License along with the Program. | ||||
| 
 | ||||
|   You may charge any price or no price for each copy that you convey, | ||||
| and you may offer support or warranty protection for a fee. | ||||
| 
 | ||||
|   5. Conveying Modified Source Versions. | ||||
| 
 | ||||
|   You may convey a work based on the Program, or the modifications to | ||||
| produce it from the Program, in the form of source code under the | ||||
| terms of section 4, provided that you also meet all of these conditions: | ||||
| 
 | ||||
|     a) The work must carry prominent notices stating that you modified | ||||
|     it, and giving a relevant date. | ||||
| 
 | ||||
|     b) The work must carry prominent notices stating that it is | ||||
|     released under this License and any conditions added under section | ||||
|     7.  This requirement modifies the requirement in section 4 to | ||||
|     "keep intact all notices". | ||||
| 
 | ||||
|     c) You must license the entire work, as a whole, under this | ||||
|     License to anyone who comes into possession of a copy.  This | ||||
|     License will therefore apply, along with any applicable section 7 | ||||
|     additional terms, to the whole of the work, and all its parts, | ||||
|     regardless of how they are packaged.  This License gives no | ||||
|     permission to license the work in any other way, but it does not | ||||
|     invalidate such permission if you have separately received it. | ||||
| 
 | ||||
|     d) If the work has interactive user interfaces, each must display | ||||
|     Appropriate Legal Notices; however, if the Program has interactive | ||||
|     interfaces that do not display Appropriate Legal Notices, your | ||||
|     work need not make them do so. | ||||
| 
 | ||||
|   A compilation of a covered work with other separate and independent | ||||
| works, which are not by their nature extensions of the covered work, | ||||
| and which are not combined with it such as to form a larger program, | ||||
| in or on a volume of a storage or distribution medium, is called an | ||||
| "aggregate" if the compilation and its resulting copyright are not | ||||
| used to limit the access or legal rights of the compilation's users | ||||
| beyond what the individual works permit.  Inclusion of a covered work | ||||
| in an aggregate does not cause this License to apply to the other | ||||
| parts of the aggregate. | ||||
| 
 | ||||
|   6. Conveying Non-Source Forms. | ||||
| 
 | ||||
|   You may convey a covered work in object code form under the terms | ||||
| of sections 4 and 5, provided that you also convey the | ||||
| machine-readable Corresponding Source under the terms of this License, | ||||
| in one of these ways: | ||||
| 
 | ||||
|     a) Convey the object code in, or embodied in, a physical product | ||||
|     (including a physical distribution medium), accompanied by the | ||||
|     Corresponding Source fixed on a durable physical medium | ||||
|     customarily used for software interchange. | ||||
| 
 | ||||
|     b) Convey the object code in, or embodied in, a physical product | ||||
|     (including a physical distribution medium), accompanied by a | ||||
|     written offer, valid for at least three years and valid for as | ||||
|     long as you offer spare parts or customer support for that product | ||||
|     model, to give anyone who possesses the object code either (1) a | ||||
|     copy of the Corresponding Source for all the software in the | ||||
|     product that is covered by this License, on a durable physical | ||||
|     medium customarily used for software interchange, for a price no | ||||
|     more than your reasonable cost of physically performing this | ||||
|     conveying of source, or (2) access to copy the | ||||
|     Corresponding Source from a network server at no charge. | ||||
| 
 | ||||
|     c) Convey individual copies of the object code with a copy of the | ||||
|     written offer to provide the Corresponding Source.  This | ||||
|     alternative is allowed only occasionally and noncommercially, and | ||||
|     only if you received the object code with such an offer, in accord | ||||
|     with subsection 6b. | ||||
| 
 | ||||
|     d) Convey the object code by offering access from a designated | ||||
|     place (gratis or for a charge), and offer equivalent access to the | ||||
|     Corresponding Source in the same way through the same place at no | ||||
|     further charge.  You need not require recipients to copy the | ||||
|     Corresponding Source along with the object code.  If the place to | ||||
|     copy the object code is a network server, the Corresponding Source | ||||
|     may be on a different server (operated by you or a third party) | ||||
|     that supports equivalent copying facilities, provided you maintain | ||||
|     clear directions next to the object code saying where to find the | ||||
|     Corresponding Source.  Regardless of what server hosts the | ||||
|     Corresponding Source, you remain obligated to ensure that it is | ||||
|     available for as long as needed to satisfy these requirements. | ||||
| 
 | ||||
|     e) Convey the object code using peer-to-peer transmission, provided | ||||
|     you inform other peers where the object code and Corresponding | ||||
|     Source of the work are being offered to the general public at no | ||||
|     charge under subsection 6d. | ||||
| 
 | ||||
|   A separable portion of the object code, whose source code is excluded | ||||
| from the Corresponding Source as a System Library, need not be | ||||
| included in conveying the object code work. | ||||
| 
 | ||||
|   A "User Product" is either (1) a "consumer product", which means any | ||||
| tangible personal property which is normally used for personal, family, | ||||
| or household purposes, or (2) anything designed or sold for incorporation | ||||
| into a dwelling.  In determining whether a product is a consumer product, | ||||
| doubtful cases shall be resolved in favor of coverage.  For a particular | ||||
| product received by a particular user, "normally used" refers to a | ||||
| typical or common use of that class of product, regardless of the status | ||||
| of the particular user or of the way in which the particular user | ||||
| actually uses, or expects or is expected to use, the product.  A product | ||||
| is a consumer product regardless of whether the product has substantial | ||||
| commercial, industrial or non-consumer uses, unless such uses represent | ||||
| the only significant mode of use of the product. | ||||
| 
 | ||||
|   "Installation Information" for a User Product means any methods, | ||||
| procedures, authorization keys, or other information required to install | ||||
| and execute modified versions of a covered work in that User Product from | ||||
| a modified version of its Corresponding Source.  The information must | ||||
| suffice to ensure that the continued functioning of the modified object | ||||
| code is in no case prevented or interfered with solely because | ||||
| modification has been made. | ||||
| 
 | ||||
|   If you convey an object code work under this section in, or with, or | ||||
| specifically for use in, a User Product, and the conveying occurs as | ||||
| part of a transaction in which the right of possession and use of the | ||||
| User Product is transferred to the recipient in perpetuity or for a | ||||
| fixed term (regardless of how the transaction is characterized), the | ||||
| Corresponding Source conveyed under this section must be accompanied | ||||
| by the Installation Information.  But this requirement does not apply | ||||
| if neither you nor any third party retains the ability to install | ||||
| modified object code on the User Product (for example, the work has | ||||
| been installed in ROM). | ||||
| 
 | ||||
|   The requirement to provide Installation Information does not include a | ||||
| requirement to continue to provide support service, warranty, or updates | ||||
| for a work that has been modified or installed by the recipient, or for | ||||
| the User Product in which it has been modified or installed.  Access to a | ||||
| network may be denied when the modification itself materially and | ||||
| adversely affects the operation of the network or violates the rules and | ||||
| protocols for communication across the network. | ||||
| 
 | ||||
|   Corresponding Source conveyed, and Installation Information provided, | ||||
| in accord with this section must be in a format that is publicly | ||||
| documented (and with an implementation available to the public in | ||||
| source code form), and must require no special password or key for | ||||
| unpacking, reading or copying. | ||||
| 
 | ||||
|   7. Additional Terms. | ||||
| 
 | ||||
|   "Additional permissions" are terms that supplement the terms of this | ||||
| License by making exceptions from one or more of its conditions. | ||||
| Additional permissions that are applicable to the entire Program shall | ||||
| be treated as though they were included in this License, to the extent | ||||
| that they are valid under applicable law.  If additional permissions | ||||
| apply only to part of the Program, that part may be used separately | ||||
| under those permissions, but the entire Program remains governed by | ||||
| this License without regard to the additional permissions. | ||||
| 
 | ||||
|   When you convey a copy of a covered work, you may at your option | ||||
| remove any additional permissions from that copy, or from any part of | ||||
| it.  (Additional permissions may be written to require their own | ||||
| removal in certain cases when you modify the work.)  You may place | ||||
| additional permissions on material, added by you to a covered work, | ||||
| for which you have or can give appropriate copyright permission. | ||||
| 
 | ||||
|   Notwithstanding any other provision of this License, for material you | ||||
| add to a covered work, you may (if authorized by the copyright holders of | ||||
| that material) supplement the terms of this License with terms: | ||||
| 
 | ||||
|     a) Disclaiming warranty or limiting liability differently from the | ||||
|     terms of sections 15 and 16 of this License; or | ||||
| 
 | ||||
|     b) Requiring preservation of specified reasonable legal notices or | ||||
|     author attributions in that material or in the Appropriate Legal | ||||
|     Notices displayed by works containing it; or | ||||
| 
 | ||||
|     c) Prohibiting misrepresentation of the origin of that material, or | ||||
|     requiring that modified versions of such material be marked in | ||||
|     reasonable ways as different from the original version; or | ||||
| 
 | ||||
|     d) Limiting the use for publicity purposes of names of licensors or | ||||
|     authors of the material; or | ||||
| 
 | ||||
|     e) Declining to grant rights under trademark law for use of some | ||||
|     trade names, trademarks, or service marks; or | ||||
| 
 | ||||
|     f) Requiring indemnification of licensors and authors of that | ||||
|     material by anyone who conveys the material (or modified versions of | ||||
|     it) with contractual assumptions of liability to the recipient, for | ||||
|     any liability that these contractual assumptions directly impose on | ||||
|     those licensors and authors. | ||||
| 
 | ||||
|   All other non-permissive additional terms are considered "further | ||||
| restrictions" within the meaning of section 10.  If the Program as you | ||||
| received it, or any part of it, contains a notice stating that it is | ||||
| governed by this License along with a term that is a further | ||||
| restriction, you may remove that term.  If a license document contains | ||||
| a further restriction but permits relicensing or conveying under this | ||||
| License, you may add to a covered work material governed by the terms | ||||
| of that license document, provided that the further restriction does | ||||
| not survive such relicensing or conveying. | ||||
| 
 | ||||
|   If you add terms to a covered work in accord with this section, you | ||||
| must place, in the relevant source files, a statement of the | ||||
| additional terms that apply to those files, or a notice indicating | ||||
| where to find the applicable terms. | ||||
| 
 | ||||
|   Additional terms, permissive or non-permissive, may be stated in the | ||||
| form of a separately written license, or stated as exceptions; | ||||
| the above requirements apply either way. | ||||
| 
 | ||||
|   8. Termination. | ||||
| 
 | ||||
|   You may not propagate or modify a covered work except as expressly | ||||
| provided under this License.  Any attempt otherwise to propagate or | ||||
| modify it is void, and will automatically terminate your rights under | ||||
| this License (including any patent licenses granted under the third | ||||
| paragraph of section 11). | ||||
| 
 | ||||
|   However, if you cease all violation of this License, then your | ||||
| license from a particular copyright holder is reinstated (a) | ||||
| provisionally, unless and until the copyright holder explicitly and | ||||
| finally terminates your license, and (b) permanently, if the copyright | ||||
| holder fails to notify you of the violation by some reasonable means | ||||
| prior to 60 days after the cessation. | ||||
| 
 | ||||
|   Moreover, your license from a particular copyright holder is | ||||
| reinstated permanently if the copyright holder notifies you of the | ||||
| violation by some reasonable means, this is the first time you have | ||||
| received notice of violation of this License (for any work) from that | ||||
| copyright holder, and you cure the violation prior to 30 days after | ||||
| your receipt of the notice. | ||||
| 
 | ||||
|   Termination of your rights under this section does not terminate the | ||||
| licenses of parties who have received copies or rights from you under | ||||
| this License.  If your rights have been terminated and not permanently | ||||
| reinstated, you do not qualify to receive new licenses for the same | ||||
| material under section 10. | ||||
| 
 | ||||
|   9. Acceptance Not Required for Having Copies. | ||||
| 
 | ||||
|   You are not required to accept this License in order to receive or | ||||
| run a copy of the Program.  Ancillary propagation of a covered work | ||||
| occurring solely as a consequence of using peer-to-peer transmission | ||||
| to receive a copy likewise does not require acceptance.  However, | ||||
| nothing other than this License grants you permission to propagate or | ||||
| modify any covered work.  These actions infringe copyright if you do | ||||
| not accept this License.  Therefore, by modifying or propagating a | ||||
| covered work, you indicate your acceptance of this License to do so. | ||||
| 
 | ||||
|   10. Automatic Licensing of Downstream Recipients. | ||||
| 
 | ||||
|   Each time you convey a covered work, the recipient automatically | ||||
| receives a license from the original licensors, to run, modify and | ||||
| propagate that work, subject to this License.  You are not responsible | ||||
| for enforcing compliance by third parties with this License. | ||||
| 
 | ||||
|   An "entity transaction" is a transaction transferring control of an | ||||
| organization, or substantially all assets of one, or subdividing an | ||||
| organization, or merging organizations.  If propagation of a covered | ||||
| work results from an entity transaction, each party to that | ||||
| transaction who receives a copy of the work also receives whatever | ||||
| licenses to the work the party's predecessor in interest had or could | ||||
| give under the previous paragraph, plus a right to possession of the | ||||
| Corresponding Source of the work from the predecessor in interest, if | ||||
| the predecessor has it or can get it with reasonable efforts. | ||||
| 
 | ||||
|   You may not impose any further restrictions on the exercise of the | ||||
| rights granted or affirmed under this License.  For example, you may | ||||
| not impose a license fee, royalty, or other charge for exercise of | ||||
| rights granted under this License, and you may not initiate litigation | ||||
| (including a cross-claim or counterclaim in a lawsuit) alleging that | ||||
| any patent claim is infringed by making, using, selling, offering for | ||||
| sale, or importing the Program or any portion of it. | ||||
| 
 | ||||
|   11. Patents. | ||||
| 
 | ||||
|   A "contributor" is a copyright holder who authorizes use under this | ||||
| License of the Program or a work on which the Program is based.  The | ||||
| work thus licensed is called the contributor's "contributor version". | ||||
| 
 | ||||
|   A contributor's "essential patent claims" are all patent claims | ||||
| owned or controlled by the contributor, whether already acquired or | ||||
| hereafter acquired, that would be infringed by some manner, permitted | ||||
| by this License, of making, using, or selling its contributor version, | ||||
| but do not include claims that would be infringed only as a | ||||
| consequence of further modification of the contributor version.  For | ||||
| purposes of this definition, "control" includes the right to grant | ||||
| patent sublicenses in a manner consistent with the requirements of | ||||
| this License. | ||||
| 
 | ||||
|   Each contributor grants you a non-exclusive, worldwide, royalty-free | ||||
| patent license under the contributor's essential patent claims, to | ||||
| make, use, sell, offer for sale, import and otherwise run, modify and | ||||
| propagate the contents of its contributor version. | ||||
| 
 | ||||
|   In the following three paragraphs, a "patent license" is any express | ||||
| agreement or commitment, however denominated, not to enforce a patent | ||||
| (such as an express permission to practice a patent or covenant not to | ||||
| sue for patent infringement).  To "grant" such a patent license to a | ||||
| party means to make such an agreement or commitment not to enforce a | ||||
| patent against the party. | ||||
| 
 | ||||
|   If you convey a covered work, knowingly relying on a patent license, | ||||
| and the Corresponding Source of the work is not available for anyone | ||||
| to copy, free of charge and under the terms of this License, through a | ||||
| publicly available network server or other readily accessible means, | ||||
| then you must either (1) cause the Corresponding Source to be so | ||||
| available, or (2) arrange to deprive yourself of the benefit of the | ||||
| patent license for this particular work, or (3) arrange, in a manner | ||||
| consistent with the requirements of this License, to extend the patent | ||||
| license to downstream recipients.  "Knowingly relying" means you have | ||||
| actual knowledge that, but for the patent license, your conveying the | ||||
| covered work in a country, or your recipient's use of the covered work | ||||
| in a country, would infringe one or more identifiable patents in that | ||||
| country that you have reason to believe are valid. | ||||
| 
 | ||||
|   If, pursuant to or in connection with a single transaction or | ||||
| arrangement, you convey, or propagate by procuring conveyance of, a | ||||
| covered work, and grant a patent license to some of the parties | ||||
| receiving the covered work authorizing them to use, propagate, modify | ||||
| or convey a specific copy of the covered work, then the patent license | ||||
| you grant is automatically extended to all recipients of the covered | ||||
| work and works based on it. | ||||
| 
 | ||||
|   A patent license is "discriminatory" if it does not include within | ||||
| the scope of its coverage, prohibits the exercise of, or is | ||||
| conditioned on the non-exercise of one or more of the rights that are | ||||
| specifically granted under this License.  You may not convey a covered | ||||
| work if you are a party to an arrangement with a third party that is | ||||
| in the business of distributing software, under which you make payment | ||||
| to the third party based on the extent of your activity of conveying | ||||
| the work, and under which the third party grants, to any of the | ||||
| parties who would receive the covered work from you, a discriminatory | ||||
| patent license (a) in connection with copies of the covered work | ||||
| conveyed by you (or copies made from those copies), or (b) primarily | ||||
| for and in connection with specific products or compilations that | ||||
| contain the covered work, unless you entered into that arrangement, | ||||
| or that patent license was granted, prior to 28 March 2007. | ||||
| 
 | ||||
|   Nothing in this License shall be construed as excluding or limiting | ||||
| any implied license or other defenses to infringement that may | ||||
| otherwise be available to you under applicable patent law. | ||||
| 
 | ||||
|   12. No Surrender of Others' Freedom. | ||||
| 
 | ||||
|   If 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 convey a | ||||
| covered work so as to satisfy simultaneously your obligations under this | ||||
| License and any other pertinent obligations, then as a consequence you may | ||||
| not convey it at all.  For example, if you agree to terms that obligate you | ||||
| to collect a royalty for further conveying from those to whom you convey | ||||
| the Program, the only way you could satisfy both those terms and this | ||||
| License would be to refrain entirely from conveying the Program. | ||||
| 
 | ||||
|   13. Remote Network Interaction; Use with the GNU General Public License. | ||||
| 
 | ||||
|   Notwithstanding any other provision of this License, if you modify the | ||||
| Program, your modified version must prominently offer all users | ||||
| interacting with it remotely through a computer network (if your version | ||||
| supports such interaction) an opportunity to receive the Corresponding | ||||
| Source of your version by providing access to the Corresponding Source | ||||
| from a network server at no charge, through some standard or customary | ||||
| means of facilitating copying of software.  This Corresponding Source | ||||
| shall include the Corresponding Source for any work covered by version 3 | ||||
| of the GNU General Public License that is incorporated pursuant to the | ||||
| following paragraph. | ||||
| 
 | ||||
|   Notwithstanding any other provision of this License, you have | ||||
| permission to link or combine any covered work with a work licensed | ||||
| under version 3 of the GNU General Public License into a single | ||||
| combined work, and to convey the resulting work.  The terms of this | ||||
| License will continue to apply to the part which is the covered work, | ||||
| but the work with which it is combined will remain governed by version | ||||
| 3 of the GNU General Public License. | ||||
| 
 | ||||
|   14. Revised Versions of this License. | ||||
| 
 | ||||
|   The Free Software Foundation may publish revised and/or new versions of | ||||
| the GNU Affero General Public License from time to time.  Such new versions | ||||
| will be similar in spirit to the present version, but may differ in detail to | ||||
| address new problems or concerns. | ||||
| 
 | ||||
|   Each version is given a distinguishing version number.  If the | ||||
| Program specifies that a certain numbered version of the GNU Affero General | ||||
| Public License "or any later version" applies to it, you have the | ||||
| option of following the terms and conditions either of that numbered | ||||
| version or of any later version published by the Free Software | ||||
| Foundation.  If the Program does not specify a version number of the | ||||
| GNU Affero General Public License, you may choose any version ever published | ||||
| by the Free Software Foundation. | ||||
| 
 | ||||
|   If the Program specifies that a proxy can decide which future | ||||
| versions of the GNU Affero General Public License can be used, that proxy's | ||||
| public statement of acceptance of a version permanently authorizes you | ||||
| to choose that version for the Program. | ||||
| 
 | ||||
|   Later license versions may give you additional or different | ||||
| permissions.  However, no additional obligations are imposed on any | ||||
| author or copyright holder as a result of your choosing to follow a | ||||
| later version. | ||||
| 
 | ||||
|   15. Disclaimer of Warranty. | ||||
| 
 | ||||
|   THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | ||||
| APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | ||||
| HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | ||||
| OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | ||||
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||||
| PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | ||||
| IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | ||||
| ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||||
| 
 | ||||
|   16. Limitation of Liability. | ||||
| 
 | ||||
|   IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | ||||
| THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | ||||
| GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | ||||
| USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | ||||
| DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | ||||
| PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | ||||
| EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | ||||
| SUCH DAMAGES. | ||||
| 
 | ||||
|   17. Interpretation of Sections 15 and 16. | ||||
| 
 | ||||
|   If the disclaimer of warranty and limitation of liability provided | ||||
| above cannot be given local legal effect according to their terms, | ||||
| reviewing courts shall apply local law that most closely approximates | ||||
| an absolute waiver of all civil liability in connection with the | ||||
| Program, unless a warranty or assumption of liability accompanies a | ||||
| copy of the Program in return for a fee. | ||||
| 
 | ||||
|                      END OF TERMS AND CONDITIONS | ||||
| 
 | ||||
|             How to Apply These Terms to Your New Programs | ||||
| 
 | ||||
|   If you develop a new program, and you want it to be of the greatest | ||||
| possible use to the public, the best way to achieve this is to make it | ||||
| free software which everyone can redistribute and change under these terms. | ||||
| 
 | ||||
|   To do so, attach the following notices to the program.  It is safest | ||||
| to attach them to the start of each source file to most effectively | ||||
| state the exclusion of warranty; and each file should have at least | ||||
| the "copyright" line and a pointer to where the full notice is found. | ||||
| 
 | ||||
|     <one line to give the program's name and a brief idea of what it does.> | ||||
|     Copyright (C) <year>  <name of author> | ||||
| 
 | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Affero General Public License as published by | ||||
|     the Free Software Foundation, either version 3 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 Affero General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU Affero General Public License | ||||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| Also add information on how to contact you by electronic and paper mail. | ||||
| 
 | ||||
|   If your software can interact with users remotely through a computer | ||||
| network, you should also make sure that it provides a way for users to | ||||
| get its source.  For example, if your program is a web application, its | ||||
| interface could display a "Source" link that leads users to an archive | ||||
| of the code.  There are many ways you could offer source, and different | ||||
| solutions will be better for different programs; see section 13 for the | ||||
| specific requirements. | ||||
| 
 | ||||
|   You should also get your employer (if you work as a programmer) or school, | ||||
| if any, to sign a "copyright disclaimer" for the program, if necessary. | ||||
| For more information on this, and how to apply and follow the GNU AGPL, see | ||||
| <http://www.gnu.org/licenses/>. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
							
								
								
									
										112
									
								
								Library/OSRM.cpp
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								Library/OSRM.cpp
									
									
									
									
									
								
							| @ -1,94 +1,36 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "OSRM.h" | ||||
| #include <boost/foreach.hpp> | ||||
| 
 | ||||
| OSRM::OSRM(const char * server_ini_path) { | ||||
|     if( !testDataFile(server_ini_path) ){ | ||||
|         std::string error_message = std::string(server_ini_path) + " not found"; | ||||
|         throw OSRMException(error_message.c_str()); | ||||
|     } | ||||
| 
 | ||||
|     IniFile serverConfig(server_ini_path); | ||||
| 
 | ||||
|     boost::filesystem::path base_path = | ||||
|                boost::filesystem::absolute(server_ini_path).parent_path(); | ||||
| 
 | ||||
|     if ( !serverConfig.Holds("hsgrData")) { | ||||
|         throw OSRMException("no ram index file name in server ini"); | ||||
|     } | ||||
|     if ( !serverConfig.Holds("ramIndex") ) { | ||||
|         throw OSRMException("no mem index file name in server ini"); | ||||
|     } | ||||
|     if ( !serverConfig.Holds("fileIndex") ) { | ||||
|         throw OSRMException("no nodes file name in server ini"); | ||||
|     } | ||||
|     if ( !serverConfig.Holds("nodesData") ) { | ||||
|         throw OSRMException("no nodes file name in server ini"); | ||||
|     } | ||||
|     if ( !serverConfig.Holds("edgesData") ) { | ||||
|         throw OSRMException("no edges file name in server ini"); | ||||
|     } | ||||
| 
 | ||||
|     boost::filesystem::path hsgr_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("hsgrData"), | ||||
|             base_path | ||||
|     ); | ||||
| 
 | ||||
|     boost::filesystem::path ram_index_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("ramIndex"), | ||||
|             base_path | ||||
|     ); | ||||
| 
 | ||||
|     boost::filesystem::path file_index_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("fileIndex"), | ||||
|             base_path | ||||
|     ); | ||||
| 
 | ||||
|     boost::filesystem::path node_data_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("nodesData"), | ||||
|             base_path | ||||
|     ); | ||||
|     boost::filesystem::path edge_data_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("edgesData"), | ||||
|             base_path | ||||
|     ); | ||||
|     boost::filesystem::path name_data_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("namesData"), | ||||
|             base_path | ||||
|     ); | ||||
|     boost::filesystem::path timestamp_path = boost::filesystem::absolute( | ||||
|             serverConfig.GetParameter("timestamp"), | ||||
|             base_path | ||||
|     ); | ||||
| 
 | ||||
|     objects = new QueryObjectsStorage( | ||||
|         hsgr_path.string(), | ||||
|         ram_index_path.string(), | ||||
|         file_index_path.string(), | ||||
|         node_data_path.string(), | ||||
|         edge_data_path.string(), | ||||
|         name_data_path.string(), | ||||
|         timestamp_path.string() | ||||
|     ); | ||||
| 
 | ||||
| OSRM::OSRM(boost::unordered_map<const std::string,boost::filesystem::path>& paths) { | ||||
|     objects = new QueryObjectsStorage( paths ); | ||||
|     RegisterPlugin(new HelloWorldPlugin()); | ||||
|     RegisterPlugin(new LocatePlugin(objects)); | ||||
|     RegisterPlugin(new NearestPlugin(objects)); | ||||
| @ -106,9 +48,9 @@ OSRM::~OSRM() { | ||||
| void OSRM::RegisterPlugin(BasePlugin * plugin) { | ||||
|     SimpleLogger().Write()  << "loaded plugin: " << plugin->GetDescriptor(); | ||||
|     if( pluginMap.find(plugin->GetDescriptor()) != pluginMap.end() ) { | ||||
|         delete pluginMap[plugin->GetDescriptor()]; | ||||
|         delete pluginMap.find(plugin->GetDescriptor())->second; | ||||
|     } | ||||
|     pluginMap.insert(std::make_pair(plugin->GetDescriptor(), plugin)); | ||||
|     pluginMap.emplace(plugin->GetDescriptor(), plugin); | ||||
| } | ||||
| 
 | ||||
| void OSRM::RunQuery(RouteParameters & route_parameters, http::Reply & reply) { | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef OSRM_H | ||||
| #define OSRM_H | ||||
| @ -30,9 +37,9 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "../Plugins/TimestampPlugin.h" | ||||
| #include "../Plugins/ViaRoutePlugin.h" | ||||
| #include "../Server/DataStructures/RouteParameters.h" | ||||
| #include "../Util/IniFile.h" | ||||
| #include "../Util/InputFileUtil.h" | ||||
| #include "../Util/OSRMException.h" | ||||
| #include "../Util/ProgramOptions.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../Server/BasicDatastructures.h" | ||||
| 
 | ||||
| @ -47,7 +54,7 @@ class OSRM : boost::noncopyable { | ||||
|     typedef boost::unordered_map<std::string, BasePlugin *> PluginMap; | ||||
|     QueryObjectsStorage * objects; | ||||
| public: | ||||
|     OSRM(const char * server_ini_path); | ||||
|     OSRM(boost::unordered_map<const std::string,boost::filesystem::path>& paths); | ||||
|     ~OSRM(); | ||||
|     void RunQuery(RouteParameters & route_parameters, http::Reply & reply); | ||||
| private: | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BASEPLUGIN_H_ | ||||
| #define BASEPLUGIN_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef HELLOWORLDPLUGIN_H_ | ||||
| #define HELLOWORLDPLUGIN_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef LOCATEPLUGIN_H_ | ||||
| #define LOCATEPLUGIN_H_ | ||||
| @ -59,7 +66,7 @@ public: | ||||
|         reply.status = http::Reply::ok; | ||||
|         reply.content += ("{"); | ||||
|         reply.content += ("\"version\":0.3,"); | ||||
|         if(!nodeHelpDesk->FindNearestNodeCoordForLatLon(routeParameters.coordinates[0], result)) { | ||||
|         if(!nodeHelpDesk->LocateClosestEndPointForCoordinate(routeParameters.coordinates[0], result)) { | ||||
|             reply.content += ("\"status\":207,"); | ||||
|             reply.content += ("\"mapped_coordinate\":[]"); | ||||
|         } else { | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef NearestPlugin_H_ | ||||
| #define NearestPlugin_H_ | ||||
| @ -34,11 +41,9 @@ class NearestPlugin : public BasePlugin { | ||||
| public: | ||||
|     NearestPlugin(QueryObjectsStorage * objects ) | ||||
|      : | ||||
|         names(objects->names), | ||||
|         m_query_objects(objects), | ||||
|         descriptor_string("nearest") | ||||
|     { | ||||
|         nodeHelpDesk = objects->nodeHelpDesk; | ||||
| 
 | ||||
|         descriptorTable.insert(std::make_pair(""    , 0)); //default descriptor
 | ||||
|         descriptorTable.insert(std::make_pair("json", 1)); | ||||
|     } | ||||
| @ -53,12 +58,16 @@ public: | ||||
|             reply = http::Reply::stockReply(http::Reply::badRequest); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         NodeInformationHelpDesk * nodeHelpDesk = m_query_objects->nodeHelpDesk; | ||||
|         //query to helpdesk
 | ||||
|         PhantomNode result; | ||||
|         nodeHelpDesk->FindPhantomNodeForCoordinate(routeParameters.coordinates[0], result, routeParameters.zoomLevel); | ||||
|         nodeHelpDesk->FindPhantomNodeForCoordinate( | ||||
|             routeParameters.coordinates[0], | ||||
|             result, | ||||
|             routeParameters.zoomLevel | ||||
|         ); | ||||
| 
 | ||||
|         std::string tmp; | ||||
|         std::string temp_string; | ||||
|         //json
 | ||||
| 
 | ||||
|         if("" != routeParameters.jsonpParameter) { | ||||
| @ -70,23 +79,26 @@ public: | ||||
|         reply.content += ("{"); | ||||
|         reply.content += ("\"version\":0.3,"); | ||||
|         reply.content += ("\"status\":"); | ||||
|         if(UINT_MAX != result.edgeBasedNode) | ||||
|         if(UINT_MAX != result.edgeBasedNode) { | ||||
|             reply.content += "0,"; | ||||
|         else | ||||
|         } else { | ||||
|             reply.content += "207,"; | ||||
|         } | ||||
|         reply.content += ("\"mapped_coordinate\":"); | ||||
|         reply.content += "["; | ||||
|         if(UINT_MAX != result.edgeBasedNode) { | ||||
|             convertInternalLatLonToString(result.location.lat, tmp); | ||||
|             reply.content += tmp; | ||||
|             convertInternalLatLonToString(result.location.lon, tmp); | ||||
|             convertInternalLatLonToString(result.location.lat, temp_string); | ||||
|             reply.content += temp_string; | ||||
|             convertInternalLatLonToString(result.location.lon, temp_string); | ||||
|             reply.content += ","; | ||||
|             reply.content += tmp; | ||||
|             reply.content += temp_string; | ||||
|         } | ||||
|         reply.content += "],"; | ||||
|         reply.content += "\"name\":\""; | ||||
|         if(UINT_MAX != result.edgeBasedNode) | ||||
|             reply.content += names[result.nodeBasedEdgeNameID]; | ||||
|         if(UINT_MAX != result.edgeBasedNode) { | ||||
|             m_query_objects->GetName(result.nodeBasedEdgeNameID, temp_string); | ||||
|             reply.content += temp_string; | ||||
|         } | ||||
|         reply.content += "\""; | ||||
|         reply.content += ",\"transactionId\":\"OSRM Routing Engine JSON Nearest (v0.3)\""; | ||||
|         reply.content += ("}"); | ||||
| @ -104,14 +116,13 @@ public: | ||||
|             reply.headers[2].value = "attachment; filename=\"location.json\""; | ||||
|         } | ||||
|         reply.headers[0].name = "Content-Length"; | ||||
|         intToString(reply.content.size(), tmp); | ||||
|         reply.headers[0].value = tmp; | ||||
|         intToString(reply.content.size(), temp_string); | ||||
|         reply.headers[0].value = temp_string; | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     NodeInformationHelpDesk * nodeHelpDesk; | ||||
|     QueryObjectsStorage * m_query_objects; | ||||
|     HashTable<std::string, unsigned> descriptorTable; | ||||
|     std::vector<std::string> & names; | ||||
|     std::string descriptor_string; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef TIMESTAMPPLUGIN_H_ | ||||
| #define TIMESTAMPPLUGIN_H_ | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef VIAROUTEPLUGIN_H_ | ||||
| #define VIAROUTEPLUGIN_H_ | ||||
| @ -24,7 +31,6 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "BasePlugin.h" | ||||
| 
 | ||||
| #include "../Algorithms/ObjectToBase64.h" | ||||
| #include "../DataStructures/HashTable.h" | ||||
| #include "../DataStructures/QueryEdge.h" | ||||
| #include "../DataStructures/StaticGraph.h" | ||||
| #include "../DataStructures/SearchEngine.h" | ||||
| @ -35,6 +41,8 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../Util/StringUtil.h" | ||||
| 
 | ||||
| #include <boost/unordered_map.hpp> | ||||
| 
 | ||||
| #include <cstdlib> | ||||
| 
 | ||||
| #include <string> | ||||
| @ -43,7 +51,6 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| class ViaRoutePlugin : public BasePlugin { | ||||
| private: | ||||
|     NodeInformationHelpDesk * nodeHelpDesk; | ||||
|     std::vector<std::string> & names; | ||||
|     StaticGraph<QueryEdge::EdgeData> * graph; | ||||
|     HashTable<std::string, unsigned> descriptorTable; | ||||
|     SearchEngine * searchEnginePtr; | ||||
| @ -51,17 +58,17 @@ public: | ||||
| 
 | ||||
|     ViaRoutePlugin(QueryObjectsStorage * objects) | ||||
|      : | ||||
|         names(objects->names), | ||||
|         // objects(objects),
 | ||||
|         descriptor_string("viaroute") | ||||
|     { | ||||
|         nodeHelpDesk = objects->nodeHelpDesk; | ||||
|         graph = objects->graph; | ||||
| 
 | ||||
|         searchEnginePtr = new SearchEngine(graph, nodeHelpDesk, names); | ||||
|         searchEnginePtr = new SearchEngine(objects); | ||||
| 
 | ||||
|         descriptorTable.insert(std::make_pair(""    , 0)); | ||||
|         descriptorTable.insert(std::make_pair("json", 0)); | ||||
|         descriptorTable.insert(std::make_pair("gpx" , 1)); | ||||
|         // descriptorTable.emplace(""    , 0);
 | ||||
|         descriptorTable.emplace("json", 0); | ||||
|         descriptorTable.emplace("gpx" , 1); | ||||
|     } | ||||
| 
 | ||||
|     virtual ~ViaRoutePlugin() { | ||||
| @ -93,7 +100,7 @@ public: | ||||
|             if(checksumOK && i < routeParameters.hints.size() && "" != routeParameters.hints[i]) { | ||||
| //                SimpleLogger().Write() <<"Decoding hint: " << routeParameters.hints[i] << " for location index " << i;
 | ||||
|                 DecodeObjectFromBase64(routeParameters.hints[i], phantomNodeVector[i]); | ||||
|                 if(phantomNodeVector[i].isValid(nodeHelpDesk->getNumberOfNodes())) { | ||||
|                 if(phantomNodeVector[i].isValid(nodeHelpDesk->GetNumberOfNodes())) { | ||||
| //                    SimpleLogger().Write() << "Decoded hint " << i << " successfully";
 | ||||
|                     continue; | ||||
|                 } | ||||
| @ -130,7 +137,11 @@ public: | ||||
|         } | ||||
| 
 | ||||
|         _DescriptorConfig descriptorConfig; | ||||
|         unsigned descriptorType = descriptorTable[routeParameters.outputFormat]; | ||||
| 
 | ||||
|         unsigned descriptorType = 0; | ||||
|         if(descriptorTable.find(routeParameters.outputFormat) != descriptorTable.end() ) { | ||||
|             descriptorType = descriptorTable.find(routeParameters.outputFormat)->second; | ||||
|         } | ||||
|         descriptorConfig.z = routeParameters.zoomLevel; | ||||
|         descriptorConfig.instructions = routeParameters.printInstructions; | ||||
|         descriptorConfig.geometry = routeParameters.geometry; | ||||
|  | ||||
							
								
								
									
										27
									
								
								README.TXT
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README.TXT
									
									
									
									
									
								
							| @ -1,27 +0,0 @@ | ||||
| For instructions on how to compile and run OSRM, please consult the Wiki at | ||||
| 
 | ||||
| https://github.com/DennisOSRM/Project-OSRM/wiki | ||||
| 
 | ||||
| or use our free and daily updated online service at | ||||
| 
 | ||||
| http://map.project-osrm.org | ||||
| 
 | ||||
| When using the code in a scientific publication, please cite | ||||
| 
 | ||||
| @inproceedings{luxen-vetter-2011, | ||||
|  author = {Luxen, Dennis and Vetter, Christian}, | ||||
|  title = {Real-time routing with OpenStreetMap data}, | ||||
|  booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems}, | ||||
|  series = {GIS '11}, | ||||
|  year = {2011}, | ||||
|  isbn = {978-1-4503-1031-4}, | ||||
|  location = {Chicago, Illinois}, | ||||
|  pages = {513--516}, | ||||
|  numpages = {4}, | ||||
|  url = {http://doi.acm.org/10.1145/2093973.2094062}, | ||||
|  doi = {10.1145/2093973.2094062}, | ||||
|  acmid = {2094062}, | ||||
|  publisher = {ACM}, | ||||
|  address = {New York, NY, USA}, | ||||
| }  | ||||
| 
 | ||||
							
								
								
									
										52
									
								
								Rakefile
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								Rakefile
									
									
									
									
									
								
							| @ -59,23 +59,6 @@ def wait_for_shutdown name | ||||
|   raise "*** Could not terminate #{name}." | ||||
| end | ||||
| 
 | ||||
| def write_server_ini osm_file | ||||
|   s=<<-EOF | ||||
|   Threads = 1 | ||||
|   IP = 0.0.0.0 | ||||
|   Port = #{OSRM_PORT} | ||||
| 
 | ||||
|   hsgrData=#{osm_file}.osrm.hsgr | ||||
|   nodesData=#{osm_file}.osrm.nodes | ||||
|   edgesData=#{osm_file}.osrm.edges | ||||
|   ramIndex=#{osm_file}.osrm.ramIndex | ||||
|   fileIndex=#{osm_file}.osrm.fileIndex | ||||
|   namesData=#{osm_file}.osrm.names | ||||
|   timestamp=#{osm_file}.osrm.timestamp | ||||
|   EOF | ||||
|   File.open( 'server.ini', 'w') {|f| f.write( s ) } | ||||
| end | ||||
| 
 | ||||
| 
 | ||||
| desc "Rebuild and run tests." | ||||
| task :default => [:build] | ||||
| @ -93,17 +76,10 @@ end | ||||
| 
 | ||||
| desc "Setup config files." | ||||
| task :setup do | ||||
|   Dir.mkdir "#{DATA_FOLDER}" unless File.exist? "#{DATA_FOLDER}" | ||||
|   ['server.ini','extractor.ini','contractor.ini'].each do |file| | ||||
|     unless File.exist? "#{DATA_FOLDER}/#{file}" | ||||
|       puts "Copying #{file} template to #{DATA_FOLDER}/#{file}"  | ||||
|       FileUtils.cp file, "#{DATA_FOLDER}/#{file}" | ||||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| desc "Download OSM data." | ||||
| task :download => :setup do | ||||
| task :download do | ||||
|   Dir.mkdir "#{DATA_FOLDER}" unless File.exist? "#{DATA_FOLDER}" | ||||
|   puts "Downloading..." | ||||
|   puts "curl http://download.geofabrik.de/europe/#{osm_data_country}-latest.osm.pbf -o #{DATA_FOLDER}/#{osm_data_country}.osm.pbf" | ||||
| @ -122,26 +98,20 @@ task :crop do | ||||
| end | ||||
| 
 | ||||
| desc "Reprocess OSM data." | ||||
| task :process => :setup do | ||||
|   Dir.chdir DATA_FOLDER do | ||||
|     raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf #{PROFILES_FOLDER}/#{PROFILE}.lua" | ||||
|     puts | ||||
|     raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm #{osm_data_area_name}.osrm.restrictions #{PROFILES_FOLDER}/#{PROFILE}.lua" | ||||
|     puts | ||||
|   end | ||||
| task :process => [:extract,:prepare] do | ||||
| end | ||||
| 
 | ||||
| desc "Extract OSM data." | ||||
| task :extract => :setup do | ||||
| task :extract do | ||||
|   Dir.chdir DATA_FOLDER do | ||||
|     raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf ../profiles/#{PROFILE}.lua" | ||||
|     raise "Error while extracting data." unless system "../#{BUILD_FOLDER}/osrm-extract #{osm_data_area_name}.osm.pbf --profile ../profiles/#{PROFILE}.lua" | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| desc "Prepare OSM data." | ||||
| task :prepare => :setup do | ||||
| task :prepare do | ||||
|   Dir.chdir DATA_FOLDER do | ||||
|     raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm #{osm_data_area_name}.osrm.restrictions ../profiles/#{PROFILE}.lua" | ||||
|     raise "Error while preparing data." unless system "../#{BUILD_FOLDER}/osrm-prepare #{osm_data_area_name}.osrm --profile ../profiles/#{PROFILE}.lua" | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| @ -158,19 +128,17 @@ task :test do | ||||
| end | ||||
| 
 | ||||
| desc "Run the routing server in the terminal. Press Ctrl-C to stop." | ||||
| task :run => :setup do | ||||
| task :run do | ||||
|   Dir.chdir DATA_FOLDER do | ||||
|     write_server_ini osm_data_area_name | ||||
|     system "../#{BUILD_FOLDER}/osrm-routed" | ||||
|     system "../#{BUILD_FOLDER}/osrm-routed #{osm_data_area_name}.osrm --port #{OSRM_PORT}" | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| desc "Launch the routing server in the background. Use rake:down to stop it." | ||||
| task :up => :setup do | ||||
| task :up do | ||||
|   Dir.chdir DATA_FOLDER do | ||||
|     abort("Already up.") if up? | ||||
|     write_server_ini osm_data_area_name | ||||
|     pipe = IO.popen("../#{BUILD_FOLDER}/osrm-routed 1>>osrm-routed.log 2>>osrm-routed.log") | ||||
|     pipe = IO.popen("../#{BUILD_FOLDER}/osrm-routed #{osm_data_area_name}.osrm --port #{OSRM_PORT} 1>>osrm-routed.log 2>>osrm-routed.log") | ||||
|     timeout = 5 | ||||
|     (timeout*10).times do | ||||
|       begin | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef ALTERNATIVEROUTES_H_ | ||||
| #define ALTERNATIVEROUTES_H_ | ||||
|  | ||||
| @ -1,24 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BASICROUTINGINTERFACE_H_ | ||||
| #define BASICROUTINGINTERFACE_H_ | ||||
| @ -148,7 +153,14 @@ public: | ||||
|                 recursionStack.push(std::make_pair(edge.first, middle)); | ||||
|             } else { | ||||
|                 assert(!ed.shortcut); | ||||
|                 unpackedPath.push_back(_PathData(ed.id, _queryData.nodeHelpDesk->getNameIndexFromEdgeID(ed.id), _queryData.nodeHelpDesk->getTurnInstructionFromEdgeID(ed.id), ed.distance) ); | ||||
|                 unpackedPath.push_back( | ||||
|                     _PathData( | ||||
|                         ed.id, | ||||
|                         _queryData.nodeHelpDesk->GetNameIndexFromEdgeID(ed.id), | ||||
|                         _queryData.nodeHelpDesk->GetTurnInstructionForEdgeID(ed.id), | ||||
|                         ed.distance | ||||
|                     ) | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -1,24 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SHORTESTPATHROUTING_H_ | ||||
| #define SHORTESTPATHROUTING_H_ | ||||
| @ -72,15 +77,15 @@ public: | ||||
| 
 | ||||
|             //insert new starting nodes into forward heap, adjusted by previous distances.
 | ||||
|             if(searchFrom1stStartNode) { | ||||
|                 forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode, -phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode); | ||||
|                 forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode, distance1-phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode); | ||||
|                 // INFO("fw1: " << phantomNodePair.startPhantom.edgeBasedNode << "´, w: " << -phantomNodePair.startPhantom.weight1);
 | ||||
|                 forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode, -phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode); | ||||
|                 forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode, distance1-phantomNodePair.startPhantom.weight1, phantomNodePair.startPhantom.edgeBasedNode); | ||||
|                 // INFO("fw2: " << phantomNodePair.startPhantom.edgeBasedNode << "´, w: " << -phantomNodePair.startPhantom.weight1);
 | ||||
|            } | ||||
|             if(phantomNodePair.startPhantom.isBidirected() && searchFrom2ndStartNode) { | ||||
|                 forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, -phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1); | ||||
|                 forward_heap1.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, distance2-phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1); | ||||
|                 // INFO("fw1: " << phantomNodePair.startPhantom.edgeBasedNode+1 << "´, w: " << -phantomNodePair.startPhantom.weight2);
 | ||||
|                 forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, -phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1); | ||||
|                 forward_heap2.Insert(phantomNodePair.startPhantom.edgeBasedNode+1, distance2-phantomNodePair.startPhantom.weight2, phantomNodePair.startPhantom.edgeBasedNode+1); | ||||
|                 // INFO("fw2: " << phantomNodePair.startPhantom.edgeBasedNode+1 << "´, w: " << -phantomNodePair.startPhantom.weight2);
 | ||||
|             } | ||||
| 
 | ||||
| @ -160,11 +165,9 @@ public: | ||||
|                     if( *(packedPath1.end()-1) == *(temporaryPackedPath1.begin())) { | ||||
|                         packedPath2.clear(); | ||||
|                         packedPath2.insert(packedPath2.end(), packedPath1.begin(), packedPath1.end()); | ||||
|                         distance2 = distance1; | ||||
|                     } else { | ||||
|                         packedPath1.clear(); | ||||
|                         packedPath1.insert(packedPath1.end(), packedPath2.begin(), packedPath2.end()); | ||||
|                         distance1 = distance2; | ||||
|                     } | ||||
|                 } else  { | ||||
|                     //packed paths 1 and 2 may need to switch.
 | ||||
| @ -184,8 +187,8 @@ public: | ||||
|                 searchFrom2ndStartNode &= !(lastNodeID == phantomNodePair.targetPhantom.edgeBasedNode); | ||||
|             } | ||||
| 
 | ||||
|             distance1 += _localUpperbound1; | ||||
|             distance2 += _localUpperbound2; | ||||
|             distance1 = _localUpperbound1; | ||||
|             distance2 = _localUpperbound2; | ||||
|         } | ||||
| 
 | ||||
|         if(distance1 > distance2){ | ||||
|  | ||||
| @ -1,24 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef APIGRAMMAR_H_ | ||||
| #define APIGRAMMAR_H_ | ||||
|  | ||||
| @ -1,21 +1,28 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef BASIC_DATASTRUCTURES_H | ||||
| @ -129,7 +136,6 @@ std::vector<boost::asio::const_buffer> Reply::HeaderstoBuffers(){ | ||||
|     buffers.push_back(ToBuffer(status)); | ||||
|     for (std::size_t i = 0; i < headers.size(); ++i) { | ||||
|         Header& h = headers[i]; | ||||
| //        std::cout << h.name << ": " << h.value << std::endl;
 | ||||
|         buffers.push_back(boost::asio::buffer(h.name)); | ||||
|         buffers.push_back(boost::asio::buffer(seperators)); | ||||
|         buffers.push_back(boost::asio::buffer(h.value)); | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef CONNECTION_H | ||||
| #define CONNECTION_H | ||||
| @ -25,12 +32,13 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "RequestHandler.h" | ||||
| #include "RequestParser.h" | ||||
| 
 | ||||
| #include <boost/asio.hpp> | ||||
| #include <boost/array.hpp> | ||||
| #include <boost/asio.hpp> | ||||
| #include <boost/assert.hpp> | ||||
| #include <boost/bind.hpp> | ||||
| #include <boost/enable_shared_from_this.hpp> | ||||
| #include <boost/noncopyable.hpp> | ||||
| #include <boost/shared_ptr.hpp> | ||||
| #include <boost/enable_shared_from_this.hpp> | ||||
| 
 | ||||
| #include <zlib.h> | ||||
| 
 | ||||
| @ -39,88 +47,178 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| namespace http { | ||||
| 
 | ||||
| /// Represents a single connection from a client.
 | ||||
| class Connection : public boost::enable_shared_from_this<Connection>, private boost::noncopyable { | ||||
| class Connection : 	public boost::enable_shared_from_this<Connection>, | ||||
| 					private boost::noncopyable { | ||||
| public: | ||||
| 	explicit Connection(boost::asio::io_service& io_service, RequestHandler& handler) : strand(io_service), TCPsocket(io_service), requestHandler(handler) {} | ||||
| 	explicit Connection( | ||||
| 		boost::asio::io_service& io_service, | ||||
| 		RequestHandler& handler | ||||
| 	) : strand(io_service), TCP_socket(io_service), request_handler(handler) { } | ||||
| 
 | ||||
| 	boost::asio::ip::tcp::socket& socket() { | ||||
| 		return TCPsocket; | ||||
| 		return TCP_socket; | ||||
| 	} | ||||
| 
 | ||||
| 	/// Start the first asynchronous operation for the connection.
 | ||||
| 	void start() { | ||||
| 	    TCPsocket.async_read_some(boost::asio::buffer(incomingDataBuffer), strand.wrap( boost::bind(&Connection::handleRead, this->shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred))); | ||||
| 	    TCP_socket.async_read_some( | ||||
| 	    	boost::asio::buffer(incoming_data_buffer), | ||||
| 	    	strand.wrap( boost::bind( | ||||
| 	    					&Connection::handle_read, | ||||
| 	    					this->shared_from_this(), | ||||
| 	    					boost::asio::placeholders::error, | ||||
| 	    					boost::asio::placeholders::bytes_transferred) | ||||
| 	    	) | ||||
| 	    ); | ||||
| 	} | ||||
| 
 | ||||
| private: | ||||
| 	void handleRead(const boost::system::error_code& e, std::size_t bytes_transferred) { | ||||
| 		if (!e) { | ||||
| 			CompressionType compressionType(noCompression); | ||||
| 	void handle_read( | ||||
| 		const boost::system::error_code& e, | ||||
| 		std::size_t bytes_transferred | ||||
| 	) { | ||||
| 		if( !e ) { | ||||
| 			CompressionType compression_type(noCompression); | ||||
| 			boost::tribool result; | ||||
| 			boost::tie(result, boost::tuples::ignore) = requestParser.Parse( request, incomingDataBuffer.data(), incomingDataBuffer.data() + bytes_transferred, &compressionType); | ||||
| 			boost::tie(result, boost::tuples::ignore) = request_parser.Parse( | ||||
| 				request, | ||||
| 				incoming_data_buffer.data(), | ||||
| 				incoming_data_buffer.data() + bytes_transferred, | ||||
| 				&compression_type | ||||
| 			); | ||||
| 
 | ||||
| 			if (result) { | ||||
| 				//                std::cout << "----" << std::endl;
 | ||||
| 				//				if(compressionType == gzipRFC1952)
 | ||||
| 				//					std::cout << "[debug] using gzip" << std::endl;
 | ||||
| 				//				if(compressionType == deflateRFC1951)
 | ||||
| 				//					std::cout << "[debug] using deflate" << std::endl;
 | ||||
| 				//				if(compressionType == noCompression)
 | ||||
| 				//					std::cout << "[debug] no compression" << std::endl;
 | ||||
| 			    request.endpoint = TCPsocket.remote_endpoint().address(); | ||||
| 				requestHandler.handle_request(request, reply); | ||||
| 			if( result ) { | ||||
| 				request.endpoint = TCP_socket.remote_endpoint().address(); | ||||
| 				request_handler.handle_request(request, reply); | ||||
| 
 | ||||
| 				Header compressionHeader; | ||||
| 				std::vector<unsigned char> compressed; | ||||
| 				std::vector<boost::asio::const_buffer> outputBuffer; | ||||
| 				switch(compressionType) { | ||||
| 				Header compression_header; | ||||
| 				std::vector<unsigned char> compressed_output; | ||||
| 				std::vector<boost::asio::const_buffer> output_buffer; | ||||
| 				switch(compression_type) { | ||||
| 				case deflateRFC1951: | ||||
| 					compressionHeader.name = "Content-Encoding"; | ||||
| 					compressionHeader.value = "deflate"; | ||||
| 					reply.headers.insert(reply.headers.begin(), compressionHeader);   //push_back(compressionHeader);
 | ||||
| 					compressCharArray(reply.content.c_str(), reply.content.length(), compressed, compressionType); | ||||
| 					reply.setSize(compressed.size()); | ||||
| 					outputBuffer = reply.HeaderstoBuffers(); | ||||
| 					outputBuffer.push_back(boost::asio::buffer(compressed)); | ||||
| 					boost::asio::async_write(TCPsocket, outputBuffer, strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error))); | ||||
| 					compression_header.name = "Content-Encoding"; | ||||
| 					compression_header.value = "deflate"; | ||||
| 					reply.headers.insert( | ||||
| 						reply.headers.begin(), | ||||
| 						compression_header | ||||
| 					); | ||||
| 					compressCharArray( | ||||
| 						reply.content.c_str(), | ||||
| 						reply.content.length(), | ||||
| 						compressed_output, | ||||
| 						compression_type | ||||
| 					); | ||||
| 					reply.setSize(compressed_output.size()); | ||||
| 					output_buffer = reply.HeaderstoBuffers(); | ||||
| 					output_buffer.push_back( | ||||
| 						boost::asio::buffer(compressed_output) | ||||
| 					); | ||||
| 					boost::asio::async_write( | ||||
| 						TCP_socket, | ||||
| 						output_buffer, | ||||
| 						strand.wrap( | ||||
| 							boost::bind( | ||||
| 								&Connection::handle_write, | ||||
| 								this->shared_from_this(), | ||||
| 								boost::asio::placeholders::error | ||||
| 							) | ||||
| 						) | ||||
| 					); | ||||
| 					break; | ||||
| 				case gzipRFC1952: | ||||
| 					compressionHeader.name = "Content-Encoding"; | ||||
| 					compressionHeader.value = "gzip"; | ||||
| 					reply.headers.insert(reply.headers.begin(), compressionHeader); | ||||
| 					compressCharArray(reply.content.c_str(), reply.content.length(), compressed, compressionType); | ||||
| 					reply.setSize(compressed.size()); | ||||
| 					outputBuffer = reply.HeaderstoBuffers(); | ||||
| 					outputBuffer.push_back(boost::asio::buffer(compressed)); | ||||
| 					boost::asio::async_write(TCPsocket, outputBuffer, strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error)));break; | ||||
| 					compression_header.name = "Content-Encoding"; | ||||
| 					compression_header.value = "gzip"; | ||||
| 					reply.headers.insert( | ||||
| 						reply.headers.begin(), | ||||
| 						compression_header | ||||
| 					); | ||||
| 					compressCharArray( | ||||
| 						reply.content.c_str(), | ||||
| 						reply.content.length(), | ||||
| 						compressed_output, | ||||
| 						compression_type | ||||
| 					); | ||||
| 					reply.setSize(compressed_output.size()); | ||||
| 					output_buffer = reply.HeaderstoBuffers(); | ||||
| 					output_buffer.push_back( | ||||
| 						boost::asio::buffer(compressed_output) | ||||
| 					); | ||||
| 					boost::asio::async_write( | ||||
| 						TCP_socket, | ||||
| 						output_buffer, | ||||
| 						strand.wrap( | ||||
| 							boost::bind( | ||||
| 								&Connection::handle_write, | ||||
| 								this->shared_from_this(), | ||||
| 								boost::asio::placeholders::error | ||||
| 							) | ||||
| 						) | ||||
| 					); | ||||
| 					break; | ||||
| 				case noCompression: | ||||
| 					boost::asio::async_write(TCPsocket, reply.toBuffers(), strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error))); | ||||
| 					boost::asio::async_write( | ||||
| 						TCP_socket, | ||||
| 						reply.toBuffers(), | ||||
| 						strand.wrap( | ||||
| 							boost::bind( | ||||
| 								&Connection::handle_write, | ||||
| 								this->shared_from_this(), | ||||
| 								boost::asio::placeholders::error | ||||
| 								) | ||||
| 							) | ||||
| 						); | ||||
| 					break; | ||||
| 				} | ||||
| 
 | ||||
| 			} else if (!result) { | ||||
| 				reply = Reply::stockReply(Reply::badRequest); | ||||
| 				boost::asio::async_write(TCPsocket, reply.toBuffers(), strand.wrap( boost::bind(&Connection::handleWrite, this->shared_from_this(), boost::asio::placeholders::error))); | ||||
| 				boost::asio::async_write( | ||||
| 					TCP_socket, | ||||
| 					reply.toBuffers(), | ||||
| 					strand.wrap( | ||||
| 						boost::bind( | ||||
| 							&Connection::handle_write, | ||||
| 							this->shared_from_this(), | ||||
| 							boost::asio::placeholders::error | ||||
| 						) | ||||
| 					) | ||||
| 				); | ||||
| 			} else { | ||||
| 				TCPsocket.async_read_some(boost::asio::buffer(incomingDataBuffer), strand.wrap( boost::bind(&Connection::handleRead, this->shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred))); | ||||
| 				TCP_socket.async_read_some( | ||||
| 					boost::asio::buffer(incoming_data_buffer), | ||||
| 					strand.wrap( | ||||
| 						boost::bind( | ||||
| 							&Connection::handle_read, | ||||
| 							this->shared_from_this(), | ||||
| 							boost::asio::placeholders::error, | ||||
| 							boost::asio::placeholders::bytes_transferred | ||||
| 						) | ||||
| 					) | ||||
| 				); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/// Handle completion of a write operation.
 | ||||
| 	void handleWrite(const boost::system::error_code& e) { | ||||
| 	void handle_write(const boost::system::error_code& e) { | ||||
| 		if (!e) { | ||||
| 			// Initiate graceful connection closure.
 | ||||
| 			boost::system::error_code ignoredEC; | ||||
| 			TCPsocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignoredEC); | ||||
| 			TCP_socket.shutdown( | ||||
| 				boost::asio::ip::tcp::socket::shutdown_both, | ||||
| 				ignoredEC | ||||
| 			); | ||||
| 		} | ||||
| 		// No new asynchronous operations are started. This means that all shared_ptr
 | ||||
| 		// references to the connection object will disappear and the object will be
 | ||||
| 		// destroyed automatically after this handler returns. The connection class's
 | ||||
| 		// destructor closes the socket.
 | ||||
| 	} | ||||
| 
 | ||||
| 	void compressCharArray(const void *in_data, size_t in_data_size, std::vector<unsigned char> &buffer, CompressionType type) { | ||||
| 	// Big thanks to deusty who explains how to use gzip compression by
 | ||||
| 	// the right call to deflateInit2():
 | ||||
| 	// http://deusty.blogspot.com/2007/07/gzip-compressiondecompression.html
 | ||||
| 	void compressCharArray( | ||||
| 		const char * in_data, | ||||
| 		size_t in_data_size, | ||||
| 		std::vector<unsigned char> & buffer, | ||||
| 		CompressionType type | ||||
| 	) { | ||||
| 		const size_t BUFSIZE = 128 * 1024; | ||||
| 		unsigned char temp_buffer[BUFSIZE]; | ||||
| 
 | ||||
| @ -140,20 +238,23 @@ private: | ||||
| 			deflateInit(&strm, Z_BEST_SPEED); | ||||
| 			break; | ||||
| 		case gzipRFC1952: | ||||
| 			/*
 | ||||
| 			 * Big thanks to deusty who explains how to have gzip compression turned on by the right call to deflateInit2(): | ||||
| 			 * http://deusty.blogspot.com/2007/07/gzip-compressiondecompression.html
 | ||||
| 			 */ | ||||
| 			deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, (15+16), 9, Z_DEFAULT_STRATEGY); | ||||
| 			deflateInit2( | ||||
| 				&strm, | ||||
| 				Z_DEFAULT_COMPRESSION, | ||||
| 				Z_DEFLATED, | ||||
| 				(15+16), | ||||
| 				9, | ||||
| 				Z_DEFAULT_STRATEGY | ||||
| 			); | ||||
| 			break; | ||||
| 		default: | ||||
| 			assert(false); | ||||
| 			BOOST_ASSERT_MSG(false, "should not happen"); | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 		int deflate_res = Z_OK; | ||||
| 		do { | ||||
| 			if (strm.avail_out == 0) { | ||||
| 			if ( 0 == strm.avail_out ) { | ||||
| 				buffer.insert(buffer.end(), temp_buffer, temp_buffer + BUFSIZE); | ||||
| 				strm.next_out = temp_buffer; | ||||
| 				strm.avail_out = BUFSIZE; | ||||
| @ -162,17 +263,25 @@ private: | ||||
| 
 | ||||
| 		} while (deflate_res == Z_OK); | ||||
| 
 | ||||
| 		assert(deflate_res == Z_STREAM_END); | ||||
| 		buffer.insert(buffer.end(), temp_buffer, temp_buffer + BUFSIZE - strm.avail_out); | ||||
| 		BOOST_ASSERT_MSG( | ||||
| 			deflate_res == Z_STREAM_END, | ||||
| 			"compression not properly finished" | ||||
| 		); | ||||
| 
 | ||||
| 		buffer.insert( | ||||
| 			buffer.end(), | ||||
| 			temp_buffer, | ||||
| 			temp_buffer + BUFSIZE - strm.avail_out | ||||
| 		); | ||||
| 		deflateEnd(&strm); | ||||
| 	} | ||||
| 
 | ||||
| 	boost::asio::io_service::strand strand; | ||||
| 	boost::asio::ip::tcp::socket TCPsocket; | ||||
| 	RequestHandler& requestHandler; | ||||
| 	boost::array<char, 8192> incomingDataBuffer; | ||||
| 	boost::asio::ip::tcp::socket TCP_socket; | ||||
| 	RequestHandler& request_handler; | ||||
| 	boost::array<char, 8192> incoming_data_buffer; | ||||
| 	Request request; | ||||
| 	RequestParser requestParser; | ||||
| 	RequestParser request_parser; | ||||
| 	Reply reply; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -1,79 +1,86 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "QueryObjectsStorage.h" | ||||
| 
 | ||||
| QueryObjectsStorage::QueryObjectsStorage( | ||||
| 	const std::string & hsgrPath, | ||||
| 	const std::string & ramIndexPath, | ||||
| 	const std::string & fileIndexPath, | ||||
| 	const std::string & nodesPath, | ||||
| 	const std::string & edgesPath, | ||||
| 	const std::string & namesPath, | ||||
| 	const std::string & timestampPath | ||||
| ) { | ||||
| 	if( hsgrPath.empty() ) { | ||||
| QueryObjectsStorage::QueryObjectsStorage( const ServerPaths & paths ) { | ||||
| 	if( paths.find("hsgrdata") == paths.end() ) { | ||||
| 		throw OSRMException("no hsgr file given in ini file"); | ||||
| 	} | ||||
| 	if( ramIndexPath.empty() ) { | ||||
| 	if( paths.find("ramindex") == paths.end() ) { | ||||
| 		throw OSRMException("no ram index file given in ini file"); | ||||
| 	} | ||||
| 	if( fileIndexPath.empty() ) { | ||||
| 	if( paths.find("fileindex") == paths.end() ) { | ||||
| 		throw OSRMException("no mem index file given in ini file"); | ||||
| 	} | ||||
| 	if( nodesPath.empty() ) { | ||||
| 	if( paths.find("nodesdata") == paths.end() ) { | ||||
| 		throw OSRMException("no nodes file given in ini file"); | ||||
| 	} | ||||
| 	if( edgesPath.empty() ) { | ||||
| 	if( paths.find("edgesdata") == paths.end() ) { | ||||
| 		throw OSRMException("no edges file given in ini file"); | ||||
| 	} | ||||
| 	if( namesPath.empty() ) { | ||||
| 	if( paths.find("namesdata") == paths.end() ) { | ||||
| 		throw OSRMException("no names file given in ini file"); | ||||
| 	} | ||||
| 
 | ||||
| 	SimpleLogger().Write() << "loading graph data"; | ||||
| 	//Deserialize road network graph
 | ||||
| 	std::vector< QueryGraph::_StrNode> nodeList; | ||||
| 	std::vector< QueryGraph::_StrEdge> edgeList; | ||||
| 	const int n = readHSGRFromStream( | ||||
| 		hsgrPath, | ||||
| 		nodeList, | ||||
| 		edgeList, | ||||
| 		&checkSum | ||||
| 
 | ||||
| 	ServerPaths::const_iterator paths_iterator = paths.find("hsgrdata"); | ||||
| 	BOOST_ASSERT(paths.end() != paths_iterator); | ||||
| 	const std::string & hsgr_data_string = paths_iterator->second.string(); | ||||
| 
 | ||||
| 	std::vector< QueryGraph::_StrNode> node_list; | ||||
| 	std::vector< QueryGraph::_StrEdge> edge_list; | ||||
| 	const int number_of_nodes = readHSGRFromStream( | ||||
| 		hsgr_data_string, | ||||
| 		node_list, | ||||
| 		edge_list, | ||||
| 		&check_sum | ||||
| 	); | ||||
| 
 | ||||
| 	SimpleLogger().Write() << "Data checksum is " << checkSum; | ||||
| 	graph = new QueryGraph(nodeList, edgeList); | ||||
| 	assert(0 == nodeList.size()); | ||||
| 	assert(0 == edgeList.size()); | ||||
| 	SimpleLogger().Write() << "Data checksum is " << check_sum; | ||||
| 	graph = new QueryGraph(node_list, edge_list); | ||||
| 	BOOST_ASSERT(0 == node_list.size()); | ||||
| 	BOOST_ASSERT(0 == edge_list.size()); | ||||
| 
 | ||||
| 	if(timestampPath.length()) { | ||||
| 	paths_iterator = paths.find("timestamp"); | ||||
| 
 | ||||
| 	if(paths.end() != paths_iterator) { | ||||
| 	    SimpleLogger().Write() << "Loading Timestamp"; | ||||
| 	    std::ifstream timestampInStream(timestampPath.c_str()); | ||||
| 	    if(!timestampInStream) { | ||||
| 	    	SimpleLogger().Write(logWARNING) <<  timestampPath <<  " not found"; | ||||
|     	const std::string & timestamp_string = paths_iterator->second.string(); | ||||
| 
 | ||||
| 	    boost::filesystem::ifstream time_stamp_instream(timestamp_string); | ||||
| 	    if( !time_stamp_instream.good() ) { | ||||
| 	        SimpleLogger().Write(logWARNING) << timestamp_string << " not found"; | ||||
| 	    } | ||||
| 
 | ||||
| 	    getline(timestampInStream, timestamp); | ||||
| 	    timestampInStream.close(); | ||||
| 	    getline(time_stamp_instream, timestamp); | ||||
| 	    time_stamp_instream.close(); | ||||
| 	} | ||||
| 	if(!timestamp.length()) { | ||||
| 	    timestamp = "n/a"; | ||||
| @ -81,50 +88,96 @@ QueryObjectsStorage::QueryObjectsStorage( | ||||
| 	if(25 < timestamp.length()) { | ||||
| 	    timestamp.resize(25); | ||||
| 	} | ||||
| 
 | ||||
|     SimpleLogger().Write() << "Loading auxiliary information"; | ||||
| 
 | ||||
|     paths_iterator = paths.find("ramindex"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
|     const std::string & ram_index_string = paths_iterator->second.string(); | ||||
| 	paths_iterator = paths.find("fileindex"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
| 	const std::string & file_index_string = paths_iterator->second.string(); | ||||
| 	paths_iterator = paths.find("nodesdata"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
| 	const std::string & nodes_data_string = paths_iterator->second.string(); | ||||
| 	paths_iterator = paths.find("edgesdata"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
| 	const std::string & edges_data_string = paths_iterator->second.string(); | ||||
| 
 | ||||
|     //Init nearest neighbor data structure
 | ||||
| 	nodeHelpDesk = new NodeInformationHelpDesk( | ||||
| 		ramIndexPath, | ||||
| 		fileIndexPath, | ||||
| 		nodesPath, | ||||
| 		edgesPath, | ||||
| 		n, | ||||
| 		checkSum | ||||
| 		ram_index_string, | ||||
| 		file_index_string, | ||||
| 		nodes_data_string, | ||||
| 		edges_data_string, | ||||
| 		number_of_nodes, | ||||
| 		check_sum | ||||
| 	); | ||||
| 
 | ||||
| 	//deserialize street name list
 | ||||
| 	SimpleLogger().Write() << "Loading names index"; | ||||
| 	boost::filesystem::path names_file(namesPath); | ||||
| 
 | ||||
|     if ( !boost::filesystem::exists( names_file ) ) { | ||||
| 	paths_iterator = paths.find("namesdata"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
| 	const std::string & names_data_string = paths_iterator->second.string(); | ||||
|     if ( !boost::filesystem::exists( paths_iterator->second ) ) { | ||||
|         throw OSRMException("names file does not exist"); | ||||
|     } | ||||
|     if ( 0 == boost::filesystem::file_size( names_file ) ) { | ||||
|     if ( 0 == boost::filesystem::file_size( paths_iterator->second ) ) { | ||||
|         throw OSRMException("names file is empty"); | ||||
|     } | ||||
| 
 | ||||
| 	boost::filesystem::ifstream name_stream(names_file, std::ios::binary); | ||||
| 	boost::filesystem::ifstream name_stream(names_data_string, std::ios::binary); | ||||
| 	unsigned size = 0; | ||||
| 	name_stream.read((char *)&size, sizeof(unsigned)); | ||||
| 	BOOST_ASSERT_MSG(0 != size, "name file empty"); | ||||
| 	BOOST_ASSERT_MSG(0 != size, "name file broken"); | ||||
| 
 | ||||
| 	m_name_begin_indices.resize(size); | ||||
| 	name_stream.read((char*)&m_name_begin_indices[0], size*sizeof(unsigned)); | ||||
| 	name_stream.read((char *)&size, sizeof(unsigned)); | ||||
| 	BOOST_ASSERT_MSG(0 != size, "name file broken"); | ||||
| 
 | ||||
| 	m_names_char_list.resize(size+1); //+1 is sentinel/dummy element
 | ||||
| 	name_stream.read((char *)&m_names_char_list[0], size*sizeof(char)); | ||||
| 	BOOST_ASSERT_MSG(0 != m_names_char_list.size(), "could not load any names"); | ||||
| 
 | ||||
| 	char buf[1024]; | ||||
| 	for( unsigned i = 0; i < size; ++i ) { | ||||
| 		unsigned size_of_string = 0; | ||||
| 		name_stream.read((char *)&size_of_string, sizeof(unsigned)); | ||||
| 		buf[size_of_string] = '\0'; // instead of memset
 | ||||
| 		name_stream.read(buf, size_of_string); | ||||
| 		names.push_back(buf); | ||||
| 	} | ||||
| 	std::vector<std::string>(names).swap(names); | ||||
| 	BOOST_ASSERT_MSG(0 != names.size(), "could not load any names"); | ||||
| 	name_stream.close(); | ||||
| 	SimpleLogger().Write() << "All query data structures loaded"; | ||||
| } | ||||
| 
 | ||||
| void QueryObjectsStorage::GetName( | ||||
| 	const unsigned name_id, | ||||
| 	std::string & result | ||||
| ) const { | ||||
| 	if(UINT_MAX == name_id) { | ||||
| 		result = ""; | ||||
| 		return; | ||||
| 	} | ||||
| 	BOOST_ASSERT_MSG( | ||||
| 		name_id < m_name_begin_indices.size(), | ||||
| 		"name id too high" | ||||
| 	); | ||||
| 	unsigned begin_index = m_name_begin_indices[name_id]; | ||||
| 	unsigned end_index = m_name_begin_indices[name_id+1]; | ||||
| 	BOOST_ASSERT_MSG( | ||||
| 		begin_index < m_names_char_list.size(), | ||||
| 		"begin index of name too high" | ||||
| 	); | ||||
| 	BOOST_ASSERT_MSG( | ||||
| 		end_index < m_names_char_list.size(), | ||||
| 		"end index of name too high" | ||||
| 	); | ||||
| 
 | ||||
| 	BOOST_ASSERT_MSG(begin_index <= end_index, "string ends before begin"); | ||||
| 	result.clear(); | ||||
| 	result.resize(end_index - begin_index); | ||||
| 	std::copy( | ||||
| 		m_names_char_list.begin() + begin_index, | ||||
| 		m_names_char_list.begin() + end_index, | ||||
| 		result.begin() | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| QueryObjectsStorage::~QueryObjectsStorage() { | ||||
| 	//        delete names;
 | ||||
| 	delete graph; | ||||
| 	delete nodeHelpDesk; | ||||
| } | ||||
|  | ||||
| @ -1,29 +1,36 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef QUERYOBJECTSSTORAGE_H_ | ||||
| #define QUERYOBJECTSSTORAGE_H_ | ||||
| 
 | ||||
| #include "../../Util/GraphLoader.h" | ||||
| #include "../../Util/OSRMException.h" | ||||
| #include "../../Util/ProgramOptions.h" | ||||
| #include "../../Util/SimpleLogger.h" | ||||
| #include "../../DataStructures/NodeInformationHelpDesk.h" | ||||
| #include "../../DataStructures/QueryEdge.h" | ||||
| @ -41,22 +48,16 @@ struct QueryObjectsStorage { | ||||
|     typedef StaticGraph<QueryEdge::EdgeData>    QueryGraph; | ||||
|     typedef QueryGraph::InputEdge               InputEdge; | ||||
| 
 | ||||
|     NodeInformationHelpDesk * nodeHelpDesk; | ||||
|     std::vector<std::string> names; | ||||
|     QueryGraph * graph; | ||||
|     std::string timestamp; | ||||
|     unsigned checkSum; | ||||
|     NodeInformationHelpDesk                   * nodeHelpDesk; | ||||
|     std::vector<char>                           m_names_char_list; | ||||
|     std::vector<unsigned>                       m_name_begin_indices; | ||||
|     QueryGraph                                * graph; | ||||
|     std::string                                 timestamp; | ||||
|     unsigned                                    check_sum; | ||||
| 
 | ||||
|     QueryObjectsStorage( | ||||
|         const std::string & hsgrPath, | ||||
|         const std::string & ramIndexPath, | ||||
|         const std::string & fileIndexPath, | ||||
|         const std::string & nodesPath, | ||||
|         const std::string & edgesPath, | ||||
|         const std::string & namesPath, | ||||
|         const std::string & timestampPath | ||||
|     ); | ||||
|     void GetName( const unsigned name_id, std::string & result ) const; | ||||
| 
 | ||||
|     QueryObjectsStorage( const ServerPaths & paths ); | ||||
|     ~QueryObjectsStorage(); | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef ROUTE_PARAMETERS_H | ||||
| #define ROUTE_PARAMETERS_H | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef REQUEST_HANDLER_H | ||||
| #define REQUEST_HANDLER_H | ||||
| @ -40,7 +47,7 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| class RequestHandler : private boost::noncopyable { | ||||
| public: | ||||
|     typedef APIGrammar<std::string::iterator, RouteParameters> APIGrammarParser; | ||||
|     explicit RequestHandler() { } | ||||
|     explicit RequestHandler() : routing_machine(NULL) { } | ||||
| 
 | ||||
|     void handle_request(const http::Request& req, http::Reply& rep){ | ||||
|         //parse command
 | ||||
| @ -90,6 +97,10 @@ public: | ||||
|                 rep.content += "^<br></pre>"; | ||||
|             } else { | ||||
|                 //parsing done, lets call the right plugin to handle the request
 | ||||
|                 BOOST_ASSERT_MSG( | ||||
|                     routing_machine != NULL, | ||||
|                     "pointer not init'ed" | ||||
|                 ); | ||||
|                 routing_machine->RunQuery(routeParameters, rep); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef REQUEST_PARSER_H | ||||
| #define REQUEST_PARSER_H | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SERVER_H | ||||
| #define SERVER_H | ||||
|  | ||||
| @ -1,67 +1,51 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef SERVERFACTORY_H_ | ||||
| #define SERVERFACTORY_H_ | ||||
| 
 | ||||
| #include "Server.h" | ||||
| #include "../Util/IniFile.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../Util/StringUtil.h" | ||||
| 
 | ||||
| #include <zlib.h> | ||||
| 
 | ||||
| #include <boost/noncopyable.hpp> | ||||
| #include <sstream> | ||||
| 
 | ||||
| struct ServerFactory : boost::noncopyable { | ||||
| 	static Server * CreateServer( IniFile & serverConfig ) { | ||||
| 		int threads = omp_get_num_procs(); | ||||
| 		if( serverConfig.GetParameter("IP").empty() ) { | ||||
| 			serverConfig.SetParameter("IP", "0.0.0.0"); | ||||
| 		} | ||||
| 
 | ||||
| 		if( serverConfig.GetParameter("Port").empty() ) { | ||||
| 			serverConfig.SetParameter("Port", "5000"); | ||||
| 		} | ||||
| 
 | ||||
| 		if( | ||||
| 			stringToInt(serverConfig.GetParameter("Threads")) >= 1 && | ||||
| 			stringToInt(serverConfig.GetParameter("Threads")) <= threads | ||||
| 		) { | ||||
| 			threads = stringToInt( serverConfig.GetParameter("Threads") ); | ||||
| 		} | ||||
| 	static Server * CreateServer(std::string& ip_address, int ip_port, int threads) { | ||||
| 
 | ||||
| 		SimpleLogger().Write() << | ||||
| 			"http 1.1 compression handled by zlib version " << zlibVersion(); | ||||
| 
 | ||||
| 		Server * server = new Server( | ||||
| 			serverConfig.GetParameter("IP"), | ||||
| 			serverConfig.GetParameter("Port"), | ||||
| 			threads | ||||
| 		); | ||||
| 		return server; | ||||
| 	} | ||||
| 
 | ||||
| 	static Server * CreateServer(const char * iniFile) { | ||||
| 		IniFile serverConfig(iniFile); | ||||
| 		return CreateServer(serverConfig); | ||||
|         std::stringstream   port_stream; | ||||
|         port_stream << ip_port; | ||||
|         return new Server( ip_address, port_stream.str(), std::min( omp_get_num_procs(), threads) ); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "../typedefs.h" | ||||
| #include "../Algorithms/StronglyConnectedComponents.h" | ||||
| @ -26,10 +33,10 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| #include "../DataStructures/QueryEdge.h" | ||||
| #include "../DataStructures/TurnInstructions.h" | ||||
| #include "../Util/GraphLoader.h" | ||||
| #include "../Util/IniFile.h" | ||||
| #include "../Util/InputFileUtil.h" | ||||
| #include "../Util/OSRMException.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../Util/UUID.h" | ||||
| 
 | ||||
| #include <boost/foreach.hpp> | ||||
| #include <fstream> | ||||
| @ -58,6 +65,16 @@ int main (int argc, char * argv[]) { | ||||
|     SimpleLogger().Write() << | ||||
|         "Using restrictions from file: " << argv[2]; | ||||
|     std::ifstream restriction_ifstream(argv[2], std::ios::binary); | ||||
|     const UUID uuid_orig; | ||||
|     UUID uuid_loaded; | ||||
|     restriction_ifstream.read((char *) &uuid_loaded, sizeof(UUID)); | ||||
| 
 | ||||
|     if( !uuid_loaded.TestGraphUtil(uuid_orig) ) { | ||||
|         SimpleLogger().Write(logWARNING) << | ||||
|             argv[2] << " was prepared with a different build. " | ||||
|             "Reprocess to get rid of this warning."; | ||||
|     } | ||||
| 
 | ||||
|     if(!restriction_ifstream.good()) { | ||||
|         throw OSRMException("Could not access <osrm-restrictions> files"); | ||||
|     } | ||||
| @ -92,6 +109,11 @@ int main (int argc, char * argv[]) { | ||||
|     ); | ||||
|     input_stream.close(); | ||||
| 
 | ||||
|     BOOST_ASSERT_MSG( | ||||
|         restrictions_vector.size() == usable_restriction_count, | ||||
|         "size of restrictions_vector changed" | ||||
|     ); | ||||
| 
 | ||||
|     SimpleLogger().Write() << | ||||
|             restrictions_vector.size() << " restrictions, " << | ||||
|             bollard_node_IDs_vector.size() << " bollard nodes, " << | ||||
|  | ||||
							
								
								
									
										345
									
								
								Tools/io-benchmark.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										345
									
								
								Tools/io-benchmark.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,345 @@ | ||||
| /*
 | ||||
| 
 | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "../Util/OSRMException.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| #include "../Util/TimingUtil.h" | ||||
| 
 | ||||
| #include <boost/filesystem.hpp> | ||||
| #include <boost/filesystem/fstream.hpp> | ||||
| #include <boost/ref.hpp> | ||||
| 
 | ||||
| #include <cmath> | ||||
| #include <cstdio> | ||||
| #include <cstdlib> | ||||
| #include <fcntl.h> | ||||
| #ifdef __linux__ | ||||
| #include <malloc.h> | ||||
| #endif | ||||
| #include <algorithm> | ||||
| #include <iomanip> | ||||
| #include <numeric> | ||||
| #include <vector> | ||||
| 
 | ||||
| const unsigned number_of_elements = 268435456; | ||||
| 
 | ||||
| struct Statistics { double min, max, med, mean, dev; }; | ||||
| 
 | ||||
| void RunStatistics(std::vector<double> & timings_vector, Statistics & stats) { | ||||
|     std::sort(timings_vector.begin(), timings_vector.end()); | ||||
|     stats.min = timings_vector.front(); | ||||
|     stats.max = timings_vector.back(); | ||||
|     stats.med = timings_vector[timings_vector.size()/2]; | ||||
|     double primary_sum =    std::accumulate( | ||||
|                                 timings_vector.begin(), | ||||
|                                 timings_vector.end(), | ||||
|                                 0.0 | ||||
|                             ); | ||||
|     stats.mean = primary_sum / timings_vector.size(); | ||||
| 
 | ||||
|     double primary_sq_sum = std::inner_product( timings_vector.begin(), | ||||
|                                 timings_vector.end(), | ||||
|                                 timings_vector.begin(), | ||||
|                                 0.0 | ||||
|                             ); | ||||
|      stats.dev = std::sqrt( | ||||
|         primary_sq_sum / timings_vector.size() - (stats.mean * stats.mean) | ||||
|     ); | ||||
| } | ||||
| 
 | ||||
| int main (int argc, char * argv[]) { | ||||
|     LogPolicy::GetInstance().Unmute(); | ||||
| 
 | ||||
|     SimpleLogger().Write(logDEBUG) << "starting up engines, compiled at " << | ||||
|         __DATE__ << ", " __TIME__; | ||||
| 
 | ||||
|     if( 1 == argc ) { | ||||
|         SimpleLogger().Write(logWARNING) << | ||||
|             "usage: " << argv[0] << " /path/on/device"; | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     boost::filesystem::path test_path = boost::filesystem::path(argv[1]); | ||||
|     test_path /= "osrm.tst"; | ||||
|     SimpleLogger().Write(logDEBUG) << "temporary file: " << test_path.string(); | ||||
| 
 | ||||
|     try { | ||||
|         //create files for testing
 | ||||
|         if( 2 == argc) { | ||||
|             //create file to test
 | ||||
|             if( boost::filesystem::exists(test_path) ) { | ||||
|                 throw OSRMException("Data file already exists"); | ||||
|             } | ||||
| 
 | ||||
|             double time1, time2; | ||||
|             int * random_array = new int[number_of_elements]; | ||||
|             std::generate ( | ||||
|                 random_array, | ||||
|                 random_array+number_of_elements, | ||||
|                 std::rand | ||||
|             ); | ||||
| #ifdef __APPLE__ | ||||
|             FILE * fd = fopen(test_path.string().c_str(), "w"); | ||||
|             fcntl(fileno(fd), F_NOCACHE, 1); | ||||
|             fcntl(fileno(fd), F_RDAHEAD, 0); | ||||
|             time1 = get_timestamp(); | ||||
|             write( | ||||
|                 fileno(fd), | ||||
|                 (char*)random_array, | ||||
|                 number_of_elements*sizeof(unsigned) | ||||
|             ); | ||||
|             time2 = get_timestamp(); | ||||
|             fclose(fd); | ||||
| #endif | ||||
| #ifdef __linux__ | ||||
|             int f = open( | ||||
|                 test_path.string().c_str(), | ||||
|                 O_CREAT|O_TRUNC|O_WRONLY|O_SYNC, | ||||
|                 S_IRWXU | ||||
|             ); | ||||
|             time1 = get_timestamp(); | ||||
|             int ret = write( | ||||
|                 f, | ||||
|                 random_array, | ||||
|                 number_of_elements*sizeof(unsigned) | ||||
|             ); | ||||
|             if(-1 == ret) { | ||||
|                 throw OSRMException("could not write random data file"); | ||||
|             } | ||||
|             time2 = get_timestamp(); | ||||
|             close(f); | ||||
| #endif | ||||
|             delete[] random_array; | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "writing raw 1GB took " << (time2-time1)*1000 << "ms"; | ||||
|             SimpleLogger().Write() << "raw write performance: " << | ||||
|                 std::setprecision(5) << std::fixed << | ||||
|                 1024*1024/((time2-time1)*1000) << "MB/sec"; | ||||
| 
 | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "finished creation of random data. Flush disk cache now!"; | ||||
| 
 | ||||
|         } else { | ||||
| 
 | ||||
|             //
 | ||||
|             // Run Non-Cached I/O benchmarks
 | ||||
|             //
 | ||||
| 
 | ||||
|             if( !boost::filesystem::exists(test_path) ) { | ||||
|                 throw OSRMException("data file does not exist"); | ||||
|             } | ||||
| 
 | ||||
|             double time1, time2; | ||||
|             //volatiles do not get optimized
 | ||||
|             Statistics stats; | ||||
| 
 | ||||
| #ifdef __APPLE__ | ||||
|             volatile unsigned single_block[1024]; | ||||
|             char * raw_array = new char[number_of_elements*sizeof(unsigned)]; | ||||
|             FILE * fd = fopen(test_path.string().c_str(), "r"); | ||||
|             fcntl(fileno(fd), F_NOCACHE, 1); | ||||
|             fcntl(fileno(fd), F_RDAHEAD, 0); | ||||
| #endif | ||||
| #ifdef __linux__ | ||||
|             char * single_block = (char*) memalign( | ||||
|                 512, | ||||
|                 1024*sizeof(unsigned) | ||||
|             ); | ||||
| 
 | ||||
|             int f = open(test_path.string().c_str(), O_RDONLY|O_DIRECT|O_SYNC); | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "opened, error: " << strerror(errno); | ||||
|             char * raw_array = (char*) memalign( | ||||
|                 512, | ||||
|                 number_of_elements*sizeof(unsigned) | ||||
|             ); | ||||
| #endif | ||||
|             time1 = get_timestamp(); | ||||
| #ifdef __APPLE__ | ||||
|             read(fileno(fd), raw_array, number_of_elements*sizeof(unsigned)); | ||||
|             close(fileno(fd)); | ||||
|             fd = fopen(test_path.string().c_str(), "r"); | ||||
| #endif | ||||
| #ifdef __linux__ | ||||
|             int ret = read(f, raw_array, number_of_elements*sizeof(unsigned)); | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "read " << ret << " bytes, error: " << strerror(errno); | ||||
|             close(f); | ||||
|             f = open(test_path.string().c_str(), O_RDONLY|O_DIRECT|O_SYNC); | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "opened, error: " << strerror(errno); | ||||
| #endif | ||||
|             time2 = get_timestamp(); | ||||
| 
 | ||||
|             SimpleLogger().Write(logDEBUG) << | ||||
|                 "reading raw 1GB took " << (time2-time1)*1000 << "ms"; | ||||
|             SimpleLogger().Write() << "raw read performance: " << | ||||
|                 std::setprecision(5) << std::fixed << | ||||
|                 1024*1024/((time2-time1)*1000) << "MB/sec"; | ||||
| 
 | ||||
|             std::vector<double> timing_results_raw_random; | ||||
|             SimpleLogger().Write(logDEBUG) << "running 1000 random I/Os of 4KB"; | ||||
| 
 | ||||
| #ifdef __APPLE__ | ||||
|             fseek(fd, 0, SEEK_SET); | ||||
| #endif | ||||
| #ifdef __linux__ | ||||
|             lseek(f, 0, SEEK_SET); | ||||
| #endif | ||||
|             //make 1000 random access, time each I/O seperately
 | ||||
|             unsigned number_of_blocks = (number_of_elements*sizeof(unsigned)-1)/4096; | ||||
|             for(unsigned i = 0; i < 1000; ++i) { | ||||
|                 unsigned block_to_read = std::rand()%number_of_blocks; | ||||
|                 off_t current_offset = block_to_read*4096; | ||||
|                 time1 = get_timestamp(); | ||||
| #ifdef __APPLE__ | ||||
|                 int ret1 = fseek(fd, current_offset, SEEK_SET); | ||||
|                 int ret2 = read(fileno(fd), (char*)&single_block[0], 4096); | ||||
| #endif | ||||
| #ifdef __linux__ | ||||
|                 int ret1 = lseek(f, current_offset, SEEK_SET); | ||||
|                 int ret2 = read(f, (char*)single_block, 4096); | ||||
| #endif | ||||
|                 time2 = get_timestamp(); | ||||
|                 if( ((off_t)-1) == ret1) { | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "offset: " << current_offset; | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "seek error " << strerror(errno); | ||||
|                     throw OSRMException("seek error"); | ||||
|                 } | ||||
|                  if(-1 == ret2) { | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "offset: " << current_offset; | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "read error " << strerror(errno); | ||||
|                     throw OSRMException("read error"); | ||||
|                 } | ||||
|                timing_results_raw_random.push_back((time2-time1)*1000.); | ||||
|             } | ||||
| 
 | ||||
|             // Do statistics
 | ||||
|             SimpleLogger().Write(logDEBUG) << "running raw random I/O statistics"; | ||||
|             std::ofstream random_csv("random.csv", std::ios::trunc); | ||||
|             for(unsigned i = 0; i < timing_results_raw_random.size(); ++i) { | ||||
|                 random_csv << i << ", " << timing_results_raw_random[i] << std::endl; | ||||
|             } | ||||
|             random_csv.close(); | ||||
|             RunStatistics(timing_results_raw_random, stats); | ||||
| 
 | ||||
|             SimpleLogger().Write() << "raw random I/O: "  << | ||||
|                 std::setprecision(5) << std::fixed << | ||||
|                 "min: "  << stats.min  << "ms, " << | ||||
|                 "mean: " << stats.mean << "ms, " << | ||||
|                 "med: "  << stats.med  << "ms, " << | ||||
|                 "max: "  << stats.max  << "ms, " << | ||||
|                 "dev: "  << stats.dev  << "ms"; | ||||
| 
 | ||||
|             std::vector<double> timing_results_raw_seq; | ||||
| #ifdef __APPLE__ | ||||
|             fseek(fd, 0, SEEK_SET); | ||||
| #endif | ||||
| #ifdef __linux__ | ||||
|             lseek(f, 0, SEEK_SET); | ||||
| #endif | ||||
| 
 | ||||
|             //read every 100th block
 | ||||
|             for( | ||||
|                 unsigned i = 0; | ||||
|                 i < 1000; | ||||
|                 ++i | ||||
|             ) { | ||||
|                 off_t current_offset = i*4096; | ||||
|                 time1 = get_timestamp(); | ||||
|     #ifdef __APPLE__ | ||||
|                 int ret1 = fseek(fd, current_offset, SEEK_SET); | ||||
|                 int ret2 = read(fileno(fd), (char*)&single_block, 4096); | ||||
|     #endif | ||||
|     #ifdef __linux__ | ||||
|                 int ret1 = lseek(f, current_offset, SEEK_SET); | ||||
| 
 | ||||
|                 int ret2 = read(f, (char*)single_block, 4096); | ||||
|     #endif | ||||
|                 time2 = get_timestamp(); | ||||
|                 if( ((off_t)-1) == ret1) { | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "offset: " << current_offset; | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "seek error " << strerror(errno); | ||||
|                     throw OSRMException("seek error"); | ||||
|                 } | ||||
|                  if(-1 == ret2) { | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "offset: " << current_offset; | ||||
|                     SimpleLogger().Write(logWARNING) | ||||
|                         << "read error " << strerror(errno); | ||||
|                     throw OSRMException("read error"); | ||||
|                 } | ||||
|                timing_results_raw_seq.push_back((time2-time1)*1000.); | ||||
|             } | ||||
|     #ifdef __APPLE__ | ||||
|             fclose(fd); | ||||
|             // free(single_element);
 | ||||
|             free(raw_array); | ||||
|             // free(single_block);
 | ||||
|     #endif | ||||
|     #ifdef __linux__ | ||||
|             close(f); | ||||
|     #endif | ||||
|             //Do statistics
 | ||||
|             SimpleLogger().Write(logDEBUG) << "running sequential I/O statistics"; | ||||
|             //print simple statistics: min, max, median, variance
 | ||||
|             std::ofstream seq_csv("sequential.csv", std::ios::trunc); | ||||
|             for(unsigned i = 0; i < timing_results_raw_seq.size(); ++i) { | ||||
|                 seq_csv << i << ", " << timing_results_raw_seq[i] << std::endl; | ||||
|             } | ||||
|             seq_csv.close(); | ||||
|             RunStatistics(timing_results_raw_seq, stats); | ||||
|             SimpleLogger().Write() << "raw sequential I/O: " << | ||||
|                 std::setprecision(5) << std::fixed << | ||||
|                 "min: "  << stats.min  << "ms, " << | ||||
|                 "mean: " << stats.mean << "ms, " << | ||||
|                 "med: "  << stats.med  << "ms, " << | ||||
|                 "max: "  << stats.max  << "ms, " << | ||||
|                 "dev: "  << stats.dev  << "ms"; | ||||
| 
 | ||||
|             if( boost::filesystem::exists(test_path) ) { | ||||
|                 boost::filesystem::remove(test_path); | ||||
|                 SimpleLogger().Write(logDEBUG) << "removing temporary files"; | ||||
|             } | ||||
|         } | ||||
|     } catch ( const std::exception & e ) { | ||||
|         SimpleLogger().Write(logWARNING) << "caught exception: " << e.what(); | ||||
|         SimpleLogger().Write(logWARNING) << "cleaning up, and exiting"; | ||||
|         if(boost::filesystem::exists(test_path)) { | ||||
|             boost::filesystem::remove(test_path); | ||||
|             SimpleLogger().Write(logWARNING) << "removing temporary files"; | ||||
|         } | ||||
|         return -1; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| @ -1,23 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include "../Library/OSRM.h" | ||||
| #include "../Util/SimpleLogger.h" | ||||
| @ -44,13 +50,30 @@ void print_tree(boost::property_tree::ptree const& pt, const unsigned recursion_ | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main (int argc, char * argv[]) { | ||||
| int main (int argc, const char * argv[]) { | ||||
|     LogPolicy::GetInstance().Unmute(); | ||||
|     try { | ||||
|         std::cout   << "\n starting up engines, compile at " | ||||
|                     << __DATE__ << ", " __TIME__ << std::endl; | ||||
|         IniFile serverConfig((argc > 1 ? argv[1] : "server.ini")); | ||||
|         OSRM routing_machine((argc > 1 ? argv[1] : "server.ini")); | ||||
|         std::string ip_address; | ||||
|         int ip_port, requested_num_threads; | ||||
| 
 | ||||
|         ServerPaths server_paths; | ||||
|         if( !GenerateServerProgramOptions( | ||||
|                 argc, | ||||
|                 argv, | ||||
|                 server_paths, | ||||
|                 ip_address, | ||||
|                 ip_port, | ||||
|                 requested_num_threads | ||||
|              ) | ||||
|         ) { | ||||
|             return 0; | ||||
|         } | ||||
| 
 | ||||
|         SimpleLogger().Write() << | ||||
|             "starting up engines, " << g_GIT_DESCRIPTION << ", " << | ||||
|             "compiled at " << __DATE__ << ", " __TIME__; | ||||
| 
 | ||||
|         OSRM routing_machine(server_paths); | ||||
| 
 | ||||
|         RouteParameters route_parameters; | ||||
|         route_parameters.zoomLevel = 18; //no generalization
 | ||||
|  | ||||
| @ -1,24 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef AZIMUTH_H_ | ||||
| #define AZIMUTH_H_ | ||||
|  | ||||
| @ -1,9 +1,29 @@ | ||||
| /*
 | ||||
|  * ContainerUtils.h | ||||
|  * | ||||
|  *  Created on: 02.02.2013 | ||||
|  *      Author: dennis | ||||
|  */ | ||||
| 
 | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef CONTAINERUTILS_H_ | ||||
| #define CONTAINERUTILS_H_ | ||||
|  | ||||
							
								
								
									
										29
									
								
								Util/GitDescription.cpp.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Util/GitDescription.cpp.in
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| /*
 | ||||
| 
 | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #define GIT_DESCRIPTION "${GIT_DESCRIPTION}" | ||||
| char g_GIT_DESCRIPTION[] = GIT_DESCRIPTION; | ||||
							
								
								
									
										28
									
								
								Util/GitDescription.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Util/GitDescription.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| /*
 | ||||
| 
 | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| extern char g_GIT_DESCRIPTION[]; | ||||
| @ -1,22 +1,29 @@ | ||||
| /*
 | ||||
|     open source routing machine | ||||
|     Copyright (C) Dennis Luxen, others 2010 | ||||
| 
 | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU AFFERO General Public License as published by | ||||
| the Free Software Foundation; either version 3 of the License, or | ||||
| any later version. | ||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | ||||
| All rights reserved. | ||||
| 
 | ||||
| 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. | ||||
| Redistribution and use in source and binary forms, with or without modification, | ||||
| are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| You should have received a copy of the GNU Affero General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| or see http://www.gnu.org/licenses/agpl.txt.
 | ||||
|  */ | ||||
| Redistributions of source code must retain the above copyright notice, this list | ||||
| of conditions and the following disclaimer. | ||||
| Redistributions in binary form must reproduce the above copyright notice, this | ||||
| list of conditions and the following disclaimer in the documentation and/or | ||||
| other materials provided with the distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef GRAPHLOADER_H | ||||
| #define GRAPHLOADER_H | ||||
| @ -68,21 +75,21 @@ NodeID readBinaryOSRMGraphFromStream( | ||||
| 
 | ||||
|     if( !uuid_loaded.TestGraphUtil(uuid_orig) ) { | ||||
|         SimpleLogger().Write(logWARNING) << | ||||
|             ".osrm was prepared with different build.\n" | ||||
|             ".osrm was prepared with different build." | ||||
|             "Reprocess to get rid of this warning."; | ||||
|     } | ||||
| 
 | ||||
|     NodeID n, source, target; | ||||
|     EdgeID m; | ||||
|     short dir;// direction (0 = open, 1 = forward, 2+ = open)
 | ||||
|     ExternalNodeMap ext2IntNodeMap; | ||||
|     ExternalNodeMap ext_to_int_id_map; | ||||
|     in.read((char*)&n, sizeof(NodeID)); | ||||
|     SimpleLogger().Write() << "Importing n = " << n << " nodes "; | ||||
|     _Node node; | ||||
|     for (NodeID i=0; i<n; ++i) { | ||||
|         in.read((char*)&node, sizeof(_Node)); | ||||
|         int2ExtNodeMap->push_back(NodeInfo(node.lat, node.lon, node.id)); | ||||
|         ext2IntNodeMap.insert(std::make_pair(node.id, i)); | ||||
|         ext_to_int_id_map.emplace(node.id, i); | ||||
|         if(node.bollard) { | ||||
|         	bollardNodes.push_back(i); | ||||
|         } | ||||
| @ -97,28 +104,29 @@ NodeID readBinaryOSRMGraphFromStream( | ||||
| 
 | ||||
|     in.read((char*)&m, sizeof(unsigned)); | ||||
|     SimpleLogger().Write() << " and " << m << " edges "; | ||||
|     for(unsigned i = 0; i < inputRestrictions.size(); ++i) { | ||||
|         ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(inputRestrictions[i].fromNode); | ||||
|         if( intNodeID == ext2IntNodeMap.end()) { | ||||
|     // for(unsigned i = 0; i < inputRestrictions.size(); ++i) {
 | ||||
|     BOOST_FOREACH(TurnRestriction & current_restriction, inputRestrictions) { | ||||
|         ExternalNodeMap::iterator intNodeID = ext_to_int_id_map.find(current_restriction.fromNode); | ||||
|         if( intNodeID == ext_to_int_id_map.end()) { | ||||
|             SimpleLogger().Write(logDEBUG) << "Unmapped from Node of restriction"; | ||||
|             continue; | ||||
| 
 | ||||
|         } | ||||
|         inputRestrictions[i].fromNode = intNodeID->second; | ||||
|         current_restriction.fromNode = intNodeID->second; | ||||
| 
 | ||||
|         intNodeID = ext2IntNodeMap.find(inputRestrictions[i].viaNode); | ||||
|         if( intNodeID == ext2IntNodeMap.end()) { | ||||
|         intNodeID = ext_to_int_id_map.find(current_restriction.viaNode); | ||||
|         if( intNodeID == ext_to_int_id_map.end()) { | ||||
|             SimpleLogger().Write(logDEBUG) << "Unmapped via node of restriction"; | ||||
|             continue; | ||||
|         } | ||||
|         inputRestrictions[i].viaNode = intNodeID->second; | ||||
|         current_restriction.viaNode = intNodeID->second; | ||||
| 
 | ||||
|         intNodeID = ext2IntNodeMap.find(inputRestrictions[i].toNode); | ||||
|         if( intNodeID == ext2IntNodeMap.end()) { | ||||
|         intNodeID = ext_to_int_id_map.find(current_restriction.toNode); | ||||
|         if( intNodeID == ext_to_int_id_map.end()) { | ||||
|             SimpleLogger().Write(logDEBUG) << "Unmapped to node of restriction"; | ||||
|             continue; | ||||
|         } | ||||
|         inputRestrictions[i].toNode = intNodeID->second; | ||||
|         current_restriction.toNode = intNodeID->second; | ||||
|     } | ||||
| 
 | ||||
|     edgeList.reserve(m); | ||||
| @ -153,8 +161,8 @@ NodeID readBinaryOSRMGraphFromStream( | ||||
|         assert(type >= 0); | ||||
| 
 | ||||
|         //         translate the external NodeIDs to internal IDs
 | ||||
|         ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(source); | ||||
|         if( ext2IntNodeMap.find(source) == ext2IntNodeMap.end()) { | ||||
|         ExternalNodeMap::iterator intNodeID = ext_to_int_id_map.find(source); | ||||
|         if( ext_to_int_id_map.find(source) == ext_to_int_id_map.end()) { | ||||
| #ifndef NDEBUG | ||||
|             SimpleLogger().Write(logWARNING) << | ||||
|                 " unresolved source NodeID: " << source; | ||||
| @ -162,8 +170,8 @@ NodeID readBinaryOSRMGraphFromStream( | ||||
|             continue; | ||||
|         } | ||||
|         source = intNodeID->second; | ||||
|         intNodeID = ext2IntNodeMap.find(target); | ||||
|         if(ext2IntNodeMap.find(target) == ext2IntNodeMap.end()) { | ||||
|         intNodeID = ext_to_int_id_map.find(target); | ||||
|         if(ext_to_int_id_map.find(target) == ext_to_int_id_map.end()) { | ||||
| #ifndef NDEBUG | ||||
|             SimpleLogger().Write(logWARNING) << | ||||
|             "unresolved target NodeID : " << target; | ||||
| @ -215,7 +223,7 @@ NodeID readBinaryOSRMGraphFromStream( | ||||
|         } | ||||
|     } | ||||
|     typename std::vector<EdgeT>::iterator newEnd = std::remove_if(edgeList.begin(), edgeList.end(), _ExcessRemover<EdgeT>()); | ||||
|     ext2IntNodeMap.clear(); | ||||
|     ext_to_int_id_map.clear(); | ||||
|     std::vector<EdgeT>(edgeList.begin(), newEnd).swap(edgeList); //remove excess candidates.
 | ||||
|     SimpleLogger().Write() << "Graph loaded ok and has " << edgeList.size() << " edges"; | ||||
|     return n; | ||||
| @ -225,13 +233,13 @@ NodeID readDTMPGraphFromStream(std::istream &in, std::vector<EdgeT>& edgeList, s | ||||
|     NodeID n, source, target, id; | ||||
|     EdgeID m; | ||||
|     int dir, xcoord, ycoord;// direction (0 = open, 1 = forward, 2+ = open)
 | ||||
|     ExternalNodeMap ext2IntNodeMap; | ||||
|     ExternalNodeMap ext_to_int_id_map; | ||||
|     in >> n; | ||||
|     SimpleLogger().Write(logDEBUG) << "Importing n = " << n << " nodes "; | ||||
|     for (NodeID i=0; i<n; ++i) { | ||||
|         in >> id >> ycoord >> xcoord; | ||||
|         int2ExtNodeMap->push_back(NodeInfo(xcoord, ycoord, id)); | ||||
|         ext2IntNodeMap.insert(std::make_pair(id, i)); | ||||
|         ext_to_int_id_map.insert(std::make_pair(id, i)); | ||||
|     } | ||||
|     in >> m; | ||||
|     SimpleLogger().Write(logDEBUG) << " and " << m << " edges"; | ||||
| @ -321,13 +329,13 @@ NodeID readDTMPGraphFromStream(std::istream &in, std::vector<EdgeT>& edgeList, s | ||||
|         } | ||||
| 
 | ||||
|         //         translate the external NodeIDs to internal IDs
 | ||||
|         ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(source); | ||||
|         if( ext2IntNodeMap.find(source) == ext2IntNodeMap.end()) { | ||||
|         ExternalNodeMap::iterator intNodeID = ext_to_int_id_map.find(source); | ||||
|         if( ext_to_int_id_map.find(source) == ext_to_int_id_map.end()) { | ||||
|             throw OSRMException("unresolvable source Node ID"); | ||||
|         } | ||||
|         source = intNodeID->second; | ||||
|         intNodeID = ext2IntNodeMap.find(target); | ||||
|         if(ext2IntNodeMap.find(target) == ext2IntNodeMap.end()) { | ||||
|         intNodeID = ext_to_int_id_map.find(target); | ||||
|         if(ext_to_int_id_map.find(target) == ext_to_int_id_map.end()) { | ||||
|             throw OSRMException("unresolvable target Node ID"); | ||||
|         } | ||||
|         target = intNodeID->second; | ||||
| @ -339,7 +347,7 @@ NodeID readDTMPGraphFromStream(std::istream &in, std::vector<EdgeT>& edgeList, s | ||||
|         EdgeT inputEdge(source, target, 0, weight, forward, backward, type ); | ||||
|         edgeList.push_back(inputEdge); | ||||
|     } | ||||
|     ext2IntNodeMap.clear(); | ||||
|     ext_to_int_id_map.clear(); | ||||
|     std::vector<EdgeT>(edgeList.begin(), edgeList.end()).swap(edgeList); //remove excess candidates.
 | ||||
|     std::cout << "ok" << std::endl; | ||||
|     return n; | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user