00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef Tanl_Text_StringTokenizer_H
00025 #define Tanl_Text_StringTokenizer_H
00026
00027 #include "platform.h"
00028 #include <string>
00029
00030 namespace Tanl {
00031 namespace Text {
00032
00033 #define MAX_LINE_LEN 4096
00034
00035 static char const delimiters[] = " \t\r";
00036
00037 class StringTokenizer {
00038
00039 public:
00040 StringTokenizer() : is(0) { }
00041
00049 StringTokenizer(std::istream& is, char const* delim = delimiters);
00050
00059 StringTokenizer(char const* s, char const* end = 0,
00060 char const* delim = delimiters);
00061
00062 char const* hasNext();
00063
00064 char const* next();
00065
00069 int tokenLength() { return toklen; }
00070
00074 int tokenStart() { return count; }
00075
00079 void advance(int n) { count += n; if (tok) tok += n; toklen -= n; }
00080
00081 protected:
00082
00083 int count;
00084 int lineNumber;
00085 std::istream* is;
00086 char line[MAX_LINE_LEN];
00087 char const* tok;
00088 int toklen;
00089 char const* rest;
00090 char const* end;
00091 char const* delim;
00092 };
00093
00094 }
00095 }
00096
00097 #endif // Tanl_Text_StringTokenizer_H