#include <stdio.h>
#include <stdlib.h>
-void and_free(struct searchNode *thenode);
-void *and_exe(struct searchNode *thenode, int type, void *theinput);
+void and_free(searchCtx *ctx, struct searchNode *thenode);
+void *and_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput);
struct and_localdata {
int count;
searchNode **nodes;
};
-struct searchNode *and_parse(int type, int argc, char **argv) {
+struct searchNode *and_parse(searchCtx *ctx, int argc, char **argv) {
searchNode *thenode, *subnode;
struct and_localdata *localdata;
int i;
thenode->free = and_free;
for (i=0;i<argc;i++) {
- subnode=search_parse(type, argv[i]); /* Propogate the search type */
+ subnode=ctx->parser(ctx, argv[i]); /* Propogate the search type */
+ subnode=coerceNode(ctx, subnode, RETURNTYPE_BOOL); /* Needs to return BOOL */
if (subnode) {
localdata->nodes[localdata->count++] = subnode;
} else {
- and_free(thenode);
+ and_free(ctx, thenode); /* ?? */
return NULL;
}
}
return thenode;
}
-void and_free(struct searchNode *thenode) {
+void and_free(searchCtx *ctx, struct searchNode *thenode) {
struct and_localdata *localdata;
int i;
localdata=thenode->localdata;
for (i=0;i<localdata->count;i++) {
- (localdata->nodes[i]->free)(localdata->nodes[i]);
+ (localdata->nodes[i]->free)(ctx, localdata->nodes[i]);
}
free(localdata->nodes);
free(thenode);
}
-void *and_exe(struct searchNode *thenode, int type, void *theinput) {
+void *and_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) {
int i;
- void *ret;
struct and_localdata *localdata;
localdata=thenode->localdata;
for (i=0;i<localdata->count;i++) {
- ret = (localdata->nodes[i]->exe)(localdata->nodes[i], RETURNTYPE_BOOL, theinput);
- if (ret == NULL) {
- switch (type) {
-
- case RETURNTYPE_INT:
- case RETURNTYPE_BOOL:
- return NULL;
-
- case RETURNTYPE_STRING:
- return "";
- }
- }
- }
-
- switch (type) {
- case RETURNTYPE_INT:
- case RETURNTYPE_BOOL:
- return (void *)1;
-
- case RETURNTYPE_STRING:
- return "1";
+ if (!(localdata->nodes[i]->exe)(ctx, localdata->nodes[i], theinput))
+ return NULL;
}
-
- return NULL;
+ return (void *)1;
}