log4tango  4.0.3
StringUtil.hh
Go to the documentation of this file.
00001 //
00002 // StringUtil.hh
00003 //
00004 // Copyright (C) :  2000 - 2002
00005 //                                      LifeLine Networks BV (www.lifeline.nl). All rights reserved.
00006 //                                      Bastiaan Bakker. All rights reserved.   
00007 //                                      
00008 //                                      2004,2005,2006,2007,2008,2009,2010
00009 //                                      Synchrotron SOLEIL
00010 //                      L'Orme des Merisiers
00011 //                      Saint-Aubin - BP 48 - France
00012 //
00013 // This file is part of log4tango.
00014 //
00015 // Log4ango is free software: you can redistribute it and/or modify
00016 // it under the terms of the GNU Lesser General Public License as published by
00017 // the Free Software Foundation, either version 3 of the License, or
00018 // (at your option) any later version.
00019 // 
00020 // Log4tango is distributed in the hope that it will be useful,
00021 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 // GNU Lesser General Public License for more details.
00024 // 
00025 // You should have received a copy of the GNU Lesser General Public License
00026 // along with Log4Tango.  If not, see <http://www.gnu.org/licenses/>.
00027 
00028 #ifndef _LOG4TANGO_STRINGUTIL_H
00029 #define _LOG4TANGO_STRINGUTIL_H
00030 
00031 #include "PortabilityImpl.hh"
00032 #include <string>
00033 #include <vector>
00034 #include <climits>
00035 #include <stdarg.h>
00036 
00037 namespace log4tango {
00038 
00039 class StringUtil 
00040 {
00041 public:
00042 
00049   static std::string vform(const char* format, va_list args);
00050 
00055   static std::string trim(const std::string& s);
00056 
00070   static unsigned int split(std::vector<std::string>& v, 
00071                                                     const std::string& s, char delimiter,
00072                                                     unsigned int maxSegments = INT_MAX);
00073 
00084   template<typename T> 
00085   static unsigned int split(T& output,
00086                             const std::string& s, char delimiter,
00087                             unsigned int maxSegments = INT_MAX) 
00088   {
00089     std::string::size_type left = 0;
00090     unsigned int i;
00091     for (i = 1; i < maxSegments; i++) {
00092       std::string::size_type right = s.find(delimiter, left);
00093       if (right == std::string::npos) {
00094           break;
00095       }
00096       *output++ = s.substr(left, right - left);
00097       left = right + 1;
00098     }
00099     *output++ = s.substr(left);
00100     return i;
00101   }
00102 };
00103 
00104 } // namespace log4tango
00105 
00106 #endif // _LOG4TANGO_STRINGUTIL_HH
00107