1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- 2 // -- LocalUtil.h -- 3 // Copyright (c) 2001 - 2003 Jason 'vanRijn' Kasper <vR at movingparts dot net> 4 // 5 // Permission is hereby granted, free of charge, to any person obtaining a 6 // copy of this software and associated documentation files (the "Software"), 7 // to deal in the Software without restriction, including without limitation 8 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 // and/or sell copies of the Software, and to permit persons to whom the 10 // Software is furnished to do so, subject to the following conditions: 11 // 12 // The above copyright notice and this permission notice shall be included in 13 // all copies or substantial portions of the Software. 14 // 15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 // DEALINGS IN THE SOFTWARE. 22 23 // E_O_H_VR 24 25 #ifndef LOCALUTIL_HH 26 #define LOCALUTIL_HH 27 28 #include <string> 29 #include <fstream> 30 #include <vector> 31 #include <iostream> 32 33 class LocalUtil 34 { 35 36 public: 37 38 // trim_right() family. 39 static inline std::string trim_right ( const std::string & source , 40 const std::string & t = " " ) 41 { 42 std::string str = source; 43 return str.erase ( str.find_last_not_of ( t ) + 1 ) ; 44 } 45 46 // trim_left() family. 47 static inline std::string trim_left ( const std::string & source , 48 const std::string & t = " " ) 49 { 50 std::string str = source; 51 return str.erase ( 0 , source.find_first_not_of ( t ) ) ; 52 } 53 54 // trim() family. 55 static inline std::string trim ( const std::string & source , 56 const std::string & t = " " ) 57 { 58 std::string str = source; 59 return trim_left ( trim_right ( str , t ) , t ) ; 60 } 61 splitString(const std::string & _input,const std::string & _delim,std::vector<string> & results)62 static unsigned int splitString(const std::string & _input, const std::string & _delim, 63 std::vector<string>& results) { 64 const std::string::size_type sizeS1 = _input.size(),sizeS2 = _delim.size(); 65 std::string::size_type iPos = 0, newPos = iPos; 66 67 do { 68 newPos = _input.find(_delim, iPos); 69 if (newPos == iPos) { 70 iPos += sizeS2; 71 continue; 72 } 73 if (newPos == std::string::npos) { 74 results.push_back(_input.substr(iPos, sizeS1 - iPos)); 75 iPos = sizeS1; // iPos points to end of string 76 } else { 77 results.push_back(_input.substr(iPos, newPos - iPos)); 78 iPos = newPos + sizeS2; 79 } 80 } while (iPos < sizeS1); 81 82 return results.size(); 83 } 84 85 }; 86 #endif 87