FACT++  1.0
tokenstring.cxx
Go to the documentation of this file.
1 #define DIMLIB
2 #include "tokenstring.hxx"
3 
5 {
6  token_buff = new char[((int)strlen(str)+1)*2];
8  token_seps = 0;
9  store_str(str);
10  token_ptr = token_buff;
12 }
13 
14 TokenString::TokenString(char *str, char *seps)
15 {
16  token_buff = new char[((int)strlen(str)+1)*2];
18  token_seps = new char[((int)strlen(seps)+1)];
19  strcpy(token_seps,seps);
20  store_str(str);
21  token_ptr = token_buff;
23 }
24 
26 {
27  if(token_buff)
28  {
29  delete []token_buff;
30  token_buff = 0;
31  }
32  if(token_seps)
33  {
34  delete []token_seps;
35  token_seps = 0;
36  }
37 }
38 
40 {
41 int i, in_tok = 0;
42 int sep = 0;
43 
44  n_tokens = 0;
45  if(!token_seps)
46  {
47  while(*str)
48  {
49  if( (*str == '@') || (*str == '|') || (*str == '/') ||
50  (*str == '=') || (*str == '(') || (*str == ')') ||
51  (*str == '.') || (*str == '\n'))
52  {
53  if(in_tok)
54  {
55  *token_ptr++ = '\0';
56  n_tokens++;
57  }
58  *token_ptr++ = *str++;
59  *token_ptr++ = '\0';
60  n_tokens++;
61  in_tok = 0;
62  }
63  else if(*str == '"')
64  {
65  if(in_tok)
66  {
67  *token_ptr++ = '\0';
68  n_tokens++;
69  }
70  *token_ptr++ = *str++;
71  while(*str != '"')
72  {
73  *token_ptr++ = *str++;
74  }
75  *token_ptr++ = *str++;
76  *token_ptr++ = '\0';
77  n_tokens++;
78  in_tok = 0;
79  }
80  else if(*str == ':')
81  {
82  if(*(str+1) == ':')
83  {
84  if(in_tok)
85  {
86  *token_ptr++ = '\0';
87  n_tokens++;
88  }
89  *token_ptr++ = *str++;
90  *token_ptr++ = *str++;
91  *token_ptr++ = '\0';
92  n_tokens++;
93  in_tok = 0;
94  }
95  else
96  {
97  *token_ptr++ = *str++;
98  in_tok = 1;
99  }
100  }
101  else
102  {
103  *token_ptr++ = *str++;
104  in_tok = 1;
105  }
106  }
107  }
108  else
109  {
110  while(*str)
111  {
112  sep = 0;
113  for(i = 0; i < (int)strlen(token_seps); i++)
114  {
115  if(*str == token_seps[i])
116  {
117  if(in_tok)
118  {
119  *token_ptr++ = '\0';
120  n_tokens++;
121  }
122  *token_ptr++ = *str++;
123  *token_ptr++ = '\0';
124  sep = 1;
125  in_tok = 0;
126  n_tokens++;
127  break;
128  }
129  }
130  if(!sep)
131  {
132  *token_ptr++ = *str++;
133  in_tok = 1;
134  }
135  }
136  }
137  if(in_tok)
138  {
139  *token_ptr++ = '\0';
140  n_tokens++;
141  }
142  *token_ptr++ = '\0';
143 }
144 
145 int TokenString::getToken(char *&token)
146 {
147 
148  if(!*token_ptr)
149  {
152  return(0);
153  }
154 
156  token_ptr += (int)strlen(curr_token_ptr)+1;
157  token = curr_token_ptr;
158 
159  return(1);
160 }
161 
163 {
165 }
166 
168 {
170 }
171 
173 {
174  if(!strcmp(curr_token_ptr, str))
175  return(1);
176  return(0);
177 }
178 
180 {
182  return(1);
183  return(0);
184 }
185 
187 {
188  return n_tokens;
189 }
190 
192 {
193  int n = 0;
194  char *token;
195 
196  while(getToken(token))
197  {
198  if(!strcmp(token,str))
199  n++;
200  }
201  return n;
202 }
203 /*
204 main(int argc, char *argv[])
205 {
206  TokenString *ts;
207  char *token;
208 
209  ts = new TokenString(argv[1],"/)");
210  cout << "n = " << ts->getNTokens() << "\n";
211  cout.flush();
212  while(ts->getToken(token))
213  {
214  cout << token << "\n";
215  cout.flush();
216  }
217 }
218 */
char * curr_token_ptr
Definition: tokenstring.hxx:25
int getNTokens()
char * push_token_ptr
Definition: tokenstring.hxx:26
int cmpToken(char *str)
int i
Definition: db_dim_client.c:21
char str[80]
Definition: test_client.c:7
char * token_ptr
Definition: tokenstring.hxx:24
int getToken(char *&token)
TokenString(char *str)
Definition: tokenstring.cxx:4
int firstToken()
void store_str(char *str)
Definition: tokenstring.cxx:39
void popToken()
void pushToken()
char * token_seps
Definition: tokenstring.hxx:27
char * token_buff
Definition: tokenstring.hxx:23