00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "stdmisc.h"
00027
00028 #include "nel/misc/algo.h"
00029 #include <string>
00030
00031
00032 using namespace std;
00033
00034
00035 namespace NLMISC
00036 {
00037
00038
00039
00040 bool testWildCard(const char *strIn, const char *wildCard)
00041 {
00042
00043 while(*wildCard!=0 && *strIn!=0)
00044 {
00045
00046 if(*wildCard==*strIn)
00047 {
00048 wildCard++;
00049 strIn++;
00050 }
00051
00052 else if(*wildCard=='?')
00053 {
00054 wildCard++;
00055 strIn++;
00056 }
00057
00058 else if(*wildCard=='*')
00059 {
00060 wildCard++;
00061
00062 if(*wildCard==0)
00063 return true;
00064
00065 else
00066 {
00067
00068 string token;
00069 while(*wildCard!='*' && *wildCard!='?' && *wildCard!=0)
00070 {
00071 token+= *wildCard;
00072 wildCard++;
00073 }
00074
00075 if(token.empty())
00076 return false;
00077
00078
00079 string sCopy= strIn;
00080 uint pos= sCopy.find(token, 0);
00081 while(pos!=string::npos)
00082 {
00083
00084 if( testWildCard(strIn+pos+token.size(), wildCard) )
00085
00086 return true;
00087
00088 pos= sCopy.find(token, pos+1);
00089 }
00090
00091
00092 return false;
00093 }
00094 }
00095
00096 else
00097 return false;
00098 }
00099
00100
00101 if(*wildCard==0 && *strIn==0)
00102 return true;
00103
00104 if(*strIn==0 && wildCard[0]=='*' && wildCard[1]==0)
00105 return true;
00106
00107
00108
00109
00110
00111
00112 return false;
00113 }
00114
00115
00116
00117 void splitString(const std::string &str, const std::string &separator, std::vector<std::string> &retList)
00118 {
00119 sint pos=0;
00120 sint newPos=0;
00121 retList.clear();
00122 while( (newPos= str.find(separator,pos)) != string::npos)
00123 {
00124
00125 if(newPos-pos>0)
00126 retList.push_back(str.substr(pos, newPos-pos));
00127
00128 pos= newPos+separator.size();
00129 }
00130
00131 if( pos<(sint)str.size() )
00132 retList.push_back(str.substr(pos, str.size()-pos));
00133 }
00134
00135
00136 }