00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #pragma once
00022
00023 namespace drizzled
00024 {
00025
00026 template <class ContainerT>
00027 void tokenize(const std::string& str, ContainerT& tokens, const std::string& delimiters= " ", bool trimEmpty= false)
00028 {
00029 std::string::size_type pos;
00030 std::string::size_type lastPos= 0;
00031
00032 while (true)
00033 {
00034 pos= str.find_first_of(delimiters, lastPos);
00035 if (pos == std::string::npos)
00036 {
00037 pos= str.length();
00038
00039 if (pos != lastPos || not trimEmpty)
00040 tokens.push_back(typename ContainerT::value_type(str.data()+lastPos,
00041 static_cast<typename ContainerT::value_type::size_type>(pos)-lastPos));
00042
00043 break;
00044 }
00045 else
00046 {
00047 if (pos != lastPos || not trimEmpty)
00048 tokens.push_back(typename ContainerT::value_type(str.data()+lastPos,
00049 static_cast<typename ContainerT::value_type::size_type>(pos)-lastPos));
00050 }
00051
00052 lastPos= pos + 1;
00053 }
00054 }
00055
00056 }
00057