-
- {
- struct QueueItem *tmpptr;
- struct parameterwrapper * parameter=objectqueues[((int *)ptr)[0]];
- int i;
- struct RuntimeHash * prevptr=NULL;
- while(parameter!=NULL) {
- for(i=0;i<parameter->numberofterms;i++) {
- int andmask=parameter->intarray[i*2];
- int checkmask=parameter->intarray[i*2+1];
- if ((flag&andmask)==checkmask) {
- RuntimeHashadd(parameter->objectset, (int) ptr, (int) prevptr);
- prevptr=parameter->objectset;
- {
- struct RuntimeIterator iteratorarray[MAXTASKPARAMS];
- void * taskpointerarray[MAXTASKPARAMS];
- int j;
- int numparams=parameter->task->numParameters;
- int done=1;
- struct taskdescriptor * task=parameter->task;
- int newindex=-1;
- for(j=0;j<numparams;j++) {
- struct parameterwrapper *pw=(struct parameterwrapper *)task->descriptorarray[j]->queue;
- if (parameter==pw) {
- taskpointerarray[j]=ptr;
- newindex=j;
- } else {
- RuntimeHashiterator(pw->objectset, &iteratorarray[j]);
- if (RunhasNext(&iteratorarray[j]))
- taskpointerarray[j]=(void *) Runnext(&iteratorarray[j]);
- else
- break; /* No tasks to dispatch */
- }
- }
- /* Queue task items... */
-
- while(done) {
- struct taskparamdescriptor *tpd=RUNMALLOC(sizeof(struct taskparamdescriptor));
- tpd->task=task;
- tpd->numParameters=numparams;
- tpd->parameterArray=RUNMALLOC(sizeof(void *)*numparams);
- for(j=0;j<numparams;j++)
- tpd->parameterArray[j]=taskpointerarray[j];
- /* Queue task */
- if (!gencontains(failedtasks, tpd))
- addNewItem(activetasks, tpd);
-
- /* This loop iterates to the next paramter combination */
- for(j=0;j<numparams;j++) {
- if (j==newindex) {
- if ((j+1)==numparams)
- done=0;
- continue;
- }
- if (RunhasNext(&iteratorarray[j])) {
- taskpointerarray[j]=(void *) Runnext(&iteratorarray[j]);
- break;
- } else if ((j+1)!=numparams) {
- RuntimeHashiterator(task->descriptorarray[j]->queue, &iteratorarray[j]);
- } else {
- done=0;
- break;
- }
- }
- }
- }
- break;
- }
- }
- parameter=parameter->next;
- }
- ((struct RuntimeHash **)ptr)[2]=prevptr;