00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 # ifndef StringTokenizer_CLASS
00027 # define StringTokenizer_CLASS
00028
00029 #include <InvalidArgumentException.h>
00030 #include <OutOfBoundsException.h>
00031
00032 #include <string>
00033
00034 using std::string;
00035
00036 namespace asdm {
00037
00043 class StringTokenizer {
00044
00045 public:
00046
00047 StringTokenizer(const string &s,
00048 const string &delim = " \t\n\r\f",
00049 bool returnDelims = false)
00050 throw (InvalidArgumentException);
00051 virtual ~StringTokenizer();
00052
00053 bool hasMoreTokens();
00054 string nextToken() throw (OutOfBoundsException);
00055 string nextToken(const string delim) throw (OutOfBoundsException);
00056 int countTokens();
00057
00058 private:
00059
00060 int currentPosition;
00061 int newPosition;
00062 int maxPosition;
00063 char *str;
00064 string *ostr;
00065 string strDelimiter;
00066 const char *delimiter;
00067 int numDelimiters;
00068 bool retDelims;
00069 bool delimsChanged;
00070
00071 char maxDelimChar;
00072
00073 void setMaxDelimChar() throw (InvalidArgumentException);
00074 int skipDelimiters(int startPos) throw (InvalidArgumentException);
00075 int scanToken(int startPos);
00076 int indexOfDelimiters(char c);
00077
00078 };
00079
00080 }
00081
00082 #endif