From a8ad4695aa743ac116103d1b6b1f426d19ddfd51 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 7 Jul 2011 08:05:58 +0000 Subject: [PATCH] Typo in StringUtil.h file name. D'oh! --- DataStructures/SearchEngine.h | 2 +- Plugins/BaseDescriptor.h | 2 +- Plugins/NearestPlugin.h | 2 +- Plugins/RoutePlugin.h | 2 +- Util/StringUtil.h | 146 ++++++++++++++++++++++++++++++++++ 5 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 Util/StringUtil.h diff --git a/DataStructures/SearchEngine.h b/DataStructures/SearchEngine.h index c79674a18..30a7628b8 100644 --- a/DataStructures/SearchEngine.h +++ b/DataStructures/SearchEngine.h @@ -26,7 +26,7 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "BinaryHeap.h" #include "PhantomNodes.h" -#include "../Util/StrIngUtil.h" +#include "../Util/StringUtil.h" #include "../typedefs.h" struct _HeapData { diff --git a/Plugins/BaseDescriptor.h b/Plugins/BaseDescriptor.h index 1172265b0..f93614895 100644 --- a/Plugins/BaseDescriptor.h +++ b/Plugins/BaseDescriptor.h @@ -30,7 +30,7 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "../DataStructures/ExtractorStructs.h" #include "../DataStructures/HashTable.h" #include "../DataStructures/PolylineCompressor.h" -#include "../Util/StrIngUtil.h" +#include "../Util/StringUtil.h" struct DescriptorConfig { DescriptorConfig() : instructions(true), geometry(true), encodeGeometry(false), z(18) {} diff --git a/Plugins/NearestPlugin.h b/Plugins/NearestPlugin.h index fb1c83e87..7674e0f83 100644 --- a/Plugins/NearestPlugin.h +++ b/Plugins/NearestPlugin.h @@ -30,7 +30,7 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "../DataStructures/NodeInformationHelpDesk.h" #include "../DataStructures/HashTable.h" -#include "../Util/StrIngUtil.h" +#include "../Util/StringUtil.h" /* * This Plugin locates the nearest point on a street in the road network for a given coordinate. diff --git a/Plugins/RoutePlugin.h b/Plugins/RoutePlugin.h index 7f2916f92..249a01bb9 100644 --- a/Plugins/RoutePlugin.h +++ b/Plugins/RoutePlugin.h @@ -40,7 +40,7 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "../DataStructures/StaticGraph.h" #include "../DataStructures/SearchEngine.h" -#include "../Util/StrIngUtil.h" +#include "../Util/StringUtil.h" class RoutePlugin : public BasePlugin { public: diff --git a/Util/StringUtil.h b/Util/StringUtil.h new file mode 100644 index 000000000..d2880c24e --- /dev/null +++ b/Util/StringUtil.h @@ -0,0 +1,146 @@ +/* + 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU 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 STRINGUTIL_H_ +#define STRINGUTIL_H_ + +// precision: position after decimal point +// length: maximum number of digits including comma and decimals +template< int length, int precision > +inline char* printInt( char* buffer, int value ) +{ + bool minus = false; + if ( value < 0 ) { + minus = true; + value = -value; + } + buffer += length - 1; + for ( int i = 0; i < precision; i++ ) { + *buffer = '0' + ( value % 10 ); + value /= 10; + buffer--; + } + *buffer = '.'; + buffer--; + for ( int i = precision + 1; i < length; i++ ) { + *buffer = '0' + ( value % 10 ); + value /= 10; + if ( value == 0 ) break; + buffer--; + } + if ( minus ) { + buffer--; + *buffer = '-'; + } + return buffer; +} + +inline void intToString(const int value, std::string & output) { + // The largest 32-bit integer is 4294967295, that is 10 chars + // On the safe side, add 1 for sign, and 1 for trailing zero + char buffer[12] ; + sprintf(buffer, "%i", value) ; + output = buffer ; +} + +inline void convertInternalLatLonToString(const int value, std::string & output) +{ + char buffer[100]; + buffer[10] = 0; // Nullterminierung + char* string = printInt< 10, 5 >( buffer, value ); + output = string; +} + +inline void convertInternalCoordinateToString(const _Coordinate & coord, std::string & output) { + std::string tmp; + convertInternalLatLonToString(coord.lon, tmp); + output = tmp; + output += ","; + convertInternalLatLonToString(coord.lat, tmp); + output += tmp; + output += " "; +} +inline void convertInternalReversedCoordinateToString(const _Coordinate & coord, std::string & output) { + std::string tmp; + convertInternalLatLonToString(coord.lat, tmp); + output = tmp; + output += ","; + convertInternalLatLonToString(coord.lon, tmp); + output += tmp; + output += " "; +} + +inline void doubleToString(const double value, std::string & output){ + // The largest 32-bit integer is 4294967295, that is 10 chars + // On the safe side, add 1 for sign, and 1 for trailing zero + char buffer[12] ; + sprintf(buffer, "%f", value) ; + output = buffer ; +} + +inline std::string & replaceAll(std::string &s, const std::string &sub, const std::string &other) { + assert(!sub.empty()); + size_t b = 0; + for (;;) { + b = s.find(sub, b); + if (b == s.npos) break; + s.replace(b, sub.size(), other); + b += other.size(); + } + return s; +} + +std::vector &split(const std::string &s, char delim, std::vector &elems) { + std::stringstream ss(s); + std::string item; + while(std::getline(ss, item, delim)) { + if(item.size() > 0) + elems.push_back(item); + } + return elems; +} + +std::vector split(const std::string &s, char delim) { + std::vector elems; + return split(s, delim, elems); +} + + +std::string originals[] = {"&", "\"", "<", ">", "'", "[", "]"}; +std::string entities[] = {"&", """, "<", ">", "'", "&91;", "&93;" }; + +std::string HTMLEntitize( std::string result) { + for(unsigned i = 0; i < sizeof(originals)/sizeof(std::string); i++) { + result = replaceAll(result, originals[i], entities[i]); + } + return result; +} + +std::string HTMLDeEntitize( std::string result) { + for(unsigned i = 0; i < sizeof(originals)/sizeof(std::string); i++) { + result = replaceAll(result, entities[i], originals[i]); + } + return result; +} + +bool StringStartsWith(string & input, string & prefix) { + return (input.find(prefix) == 0); +} +#endif /* STRINGUTIL_H_ */