((void **)(((char *)& stringarray->___length___)+sizeof(int)))[i-1]=newstring;
}
- /* Set initialized flag for startup object */
+ /* Set initialized flag for startup object */
flagorand(startupobject,1,0xFFFFFFFF);
+ enqueueObject(startupobject);
}
int hashCodetpd(struct taskparamdescriptor *ftd) {
}
}
-void intflagorand(void * ptr, int ormask, int andmask) {
+bool intflagorand(void * ptr, int ormask, int andmask) {
#ifdef OPTIONAL
struct ___Object___ * obj = (struct ___Object___ *)ptr;
if(obj->numfses) {/*store the information about fses*/
int flag=ormask|oldflag;
flag&=andmask;
if (flag==oldflag) /* Don't do anything */
- return;
- else flagbody(ptr, flag);
+ return false;
+ else {
+ flagbody(ptr, flag);
+ return true;
+ }
}
}
free(enterflags);
flagptr=next;
}
+ }
+
+ void enqueueObject(void *vptr) {
+ struct ___Object___ *ptr = (struct ___Object___ *)vptr;
{
struct QueueItem *tmpptr;
for(i=0;i<parameter->numberofterms;i++) {
int andmask=parameter->intarray[i*2];
int checkmask=parameter->intarray[i*2+1];
- if ((flag&andmask)==checkmask) {
+ if ((ptr->flag&andmask)==checkmask) {
enqueuetasks(parameter, prevptr, ptr, NULL, 0);
prevptr=parameter;
break;
ptr->flagptr=prevptr;
}
}
-
+
#ifdef OPTIONAL
int checktags(struct ___Object___ * currobj, struct fsanalysiswrapper * fswrapper) {
/* Find initial state */
for(j=0;j<numiterators;j++) {
backtrackinit:
- if(toiHasNext(¶meter->iterators[j], taskpointerarray OPTARG(failed)))
+ if(toiHasNext(¶meter->iterators[j], taskpointerarray OPTARG(failed))){
toiNext(¶meter->iterators[j], taskpointerarray OPTARG(failed));
+ }
else if (j>0) {
/* Need to backtrack */
toiReset(¶meter->iterators[j]);
#endif
RUNFREE(tpd);
}
-
+
/* This loop iterates to the next parameter combination */
if (numiterators==0)
return retval;
for(j=numiterators-1; j<numiterators;j++) {
backtrackinc:
- if(toiHasNext(¶meter->iterators[j], taskpointerarray OPTARG(failed)))
+ if(toiHasNext(¶meter->iterators[j], taskpointerarray OPTARG(failed))){
toiNext(¶meter->iterators[j], taskpointerarray OPTARG(failed));
+ }
else if (j>0) {
/* Need to backtrack */
toiReset(¶meter->iterators[j]);
void * objptr;
// printf("Setting fd %d\n",fd);
if (RuntimeHashget(fdtoobject, fd,(int *) &objptr)) {
- intflagorand(objptr,1,0xFFFFFFFF); /* Set the first flag to 1 */
+ if(intflagorand(objptr,1,0xFFFFFFFF)) { /* Set the first flag to 1 */
+ enqueueObject(objptr);
+ }
}
}
}
if (gencontains(failedtasks, currtpd)) {
// Free up task parameter descriptor
RUNFREE(currtpd->parameterArray);
+#ifdef OPTIONAL
+ RUNFREE(currtpd->failed);
+#endif
RUNFREE(currtpd);
goto newtask;
}
struct ___TagDescriptor___ *tagd=currtpd->parameterArray[slotid];
if (!containstag(parameter, tagd)) {
RUNFREE(currtpd->parameterArray);
+#ifdef OPTIONAL
+ RUNFREE(currtpd->failed);
+#endif
RUNFREE(currtpd);
goto newtask;
}
freemalloc();
// Free up task parameter descriptor
RUNFREE(currtpd->parameterArray);
+#ifdef OPTIONAL
+ RUNFREE(currtpd->failed);
+#endif
RUNFREE(currtpd);
forward=NULL;
reverse=NULL;
int i;
int j;
for(i=0;i<numtasks;i++) {
- struct taskdescriptor * task=taskarray[i];
+ struct taskdescriptor * task=taskarray[i];
printf("%s\n", task->name);
for(j=0;j<task->numParameters;j++) {
struct parameterdescriptor *param=task->descriptorarray[j];
void processtasks() {
int i;
for(i=0;i<numtasks;i++) {
- struct taskdescriptor * task=taskarray[i];
+ struct taskdescriptor * task=taskarray[i];
int j;
for(j=0;j<task->numParameters;j++) {
parameter->numbertags=param->numbertags;
parameter->tagarray=param->tagarray;
parameter->task=task;
+ parameter->slot=j;
/* Link new queue in */
while((*ptr)!=NULL)
ptr=&((*ptr)->next);
/* Build iterators for parameters */
for(j=0;j<task->numParameters;j++) {
struct parameterdescriptor *param=task->descriptorarray[j];
- struct parameterwrapper *parameter=param->queue;
- parameter->slot=j;
+ struct parameterwrapper *parameter=param->queue;
builditerators(task, j, parameter);
}
}
}
} else {
/* Iterate object */
- objectarray[it->slot]=(void *)Objkey(&it->it);
+ void * tmpp = (void *) Objkey(&it->it);
+ objectarray[it->slot]=tmpp;
#ifdef OPTIONAL
failed[it->slot]=it->failedstate;
if (it->failedstate==0) {