Mercurial > libavcodec.hg
comparison eval.c @ 2433:0934621b6453 libavcodec
simplify, null pointer, selftest
author | michael |
---|---|
date | Sat, 15 Jan 2005 19:05:26 +0000 |
parents | 2152760d08ad |
children | 24aa9209e8b0 |
comparison
equal
deleted
inserted
replaced
2432:d9cf90e66883 | 2433:0934621b6453 |
---|---|
97 p->s= next; | 97 p->s= next; |
98 return; | 98 return; |
99 } | 99 } |
100 | 100 |
101 /* named constants */ | 101 /* named constants */ |
102 for(i=0; p->const_name[i]; i++){ | 102 for(i=0; p->const_name && p->const_name[i]; i++){ |
103 if(strmatch(p->s, p->const_name[i])){ | 103 if(strmatch(p->s, p->const_name[i])){ |
104 push(p, p->const_value[i]); | 104 push(p, p->const_value[i]); |
105 p->s+= strlen(p->const_name[i]); | 105 p->s+= strlen(p->const_name[i]); |
106 return; | 106 return; |
107 } | 107 } |
145 else if( strmatch(next, "lte" ) ) d= d >= d2 ? 0.0 : 1.0; | 145 else if( strmatch(next, "lte" ) ) d= d >= d2 ? 0.0 : 1.0; |
146 else if( strmatch(next, "eq" ) ) d= d == d2 ? 1.0 : 0.0; | 146 else if( strmatch(next, "eq" ) ) d= d == d2 ? 1.0 : 0.0; |
147 // else if( strmatch(next, "l1" ) ) d= 1 + d2*(d - 1); | 147 // else if( strmatch(next, "l1" ) ) d= 1 + d2*(d - 1); |
148 // else if( strmatch(next, "sq01" ) ) d= (d >= 0.0 && d <=1.0) ? 1.0 : 0.0; | 148 // else if( strmatch(next, "sq01" ) ) d= (d >= 0.0 && d <=1.0) ? 1.0 : 0.0; |
149 else{ | 149 else{ |
150 int error=1; | |
151 for(i=0; p->func1_name && p->func1_name[i]; i++){ | 150 for(i=0; p->func1_name && p->func1_name[i]; i++){ |
152 if(strmatch(next, p->func1_name[i])){ | 151 if(strmatch(next, p->func1_name[i])){ |
153 d= p->func1[i](p->opaque, d); | 152 d= p->func1[i](p->opaque, d); |
154 error=0; | 153 goto push_ret; |
155 break; | |
156 } | 154 } |
157 } | 155 } |
158 | 156 |
159 for(i=0; p->func2_name && p->func2_name[i]; i++){ | 157 for(i=0; p->func2_name && p->func2_name[i]; i++){ |
160 if(strmatch(next, p->func2_name[i])){ | 158 if(strmatch(next, p->func2_name[i])){ |
161 d= p->func2[i](p->opaque, d, d2); | 159 d= p->func2[i](p->opaque, d, d2); |
162 error=0; | 160 goto push_ret; |
163 break; | |
164 } | 161 } |
165 } | 162 } |
166 | 163 |
167 if(error){ | 164 av_log(NULL, AV_LOG_ERROR, "Parser: unknown function in \"%s\"\n", next); |
168 av_log(NULL, AV_LOG_ERROR, "Parser: unknown function in \"%s\"\n", next); | 165 return; |
169 return; | 166 } |
170 } | 167 |
171 } | 168 push_ret: |
172 | |
173 push(p, d); | 169 push(p, d); |
174 } | 170 } |
175 | 171 |
176 static void evalPow(Parser *p){ | 172 static void evalPow(Parser *p){ |
177 int neg= 0; | 173 int neg= 0; |
181 neg= 1; | 177 neg= 1; |
182 p->s++; | 178 p->s++; |
183 } | 179 } |
184 | 180 |
185 if(p->s[0]=='('){ | 181 if(p->s[0]=='('){ |
186 p->s++;; | 182 p->s++; |
187 evalExpression(p); | 183 evalExpression(p); |
188 | 184 |
189 if(p->s[0]!=')') | 185 if(p->s[0]!=')') |
190 av_log(NULL, AV_LOG_ERROR, "Parser: missing )\n"); | 186 av_log(NULL, AV_LOG_ERROR, "Parser: missing )\n"); |
191 p->s++; | 187 p->s++; |
253 p.opaque = opaque; | 249 p.opaque = opaque; |
254 | 250 |
255 evalExpression(&p); | 251 evalExpression(&p); |
256 return pop(&p); | 252 return pop(&p); |
257 } | 253 } |
254 | |
255 #ifdef TEST | |
256 #undef printf | |
257 static double const_values[]={ | |
258 M_PI, | |
259 M_E, | |
260 0 | |
261 }; | |
262 static const char *const_names[]={ | |
263 "PI", | |
264 "E", | |
265 0 | |
266 }; | |
267 main(){ | |
268 printf("%f == 12.7\n", ff_eval("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL)); | |
269 } | |
270 #endif |