struct val_struct_t *valInvert(struct val_struct_t *in){ struct val_struct_t *a = copyVal(in); if (a->valueType==vtList){ //Oo. List, erm... //Recurse! struct val_list_item *currentItem; currentItem = a->list; while (currentItem != NULL){ currentItem->item = valInvert(currentItem->item); currentItem = currentItem->nextItem; } return a; } char * oldstring = a->valS; switch(a->valueType){ case vtInt: a->valI = (a->valI != 0)?0:1; //ints are easy return a; case vtFloat: a->valF = 0 - a->valF; //floats even easier return a; case vtString: #define END_STRING_INV free(oldstring);return a; //Now, strings, they are wacky, this can make some magic happen... if (strcmp(oldstring, "") == 0){a->valS = newString("1234567890"); /*TODO generate random*/ END_STRING_INV} if (strcmp(oldstring, "no") == 0){a->valS = newString("yes");END_STRING_INV}
/** parseEnVar * Input: * char *env -> the environment variable to parse * Output: * int *n the number of key/val pairs parsed * Envar * -> structure containing key/val pairs */ Envar *parseEnVar(char *env, int *n) { Envar *c = NULL; int nc = 0; char *cookiestr = NULL; if (!env) { *n = 0; return NULL; } /* add ; to end of string for easier parsing */ cookiestr = malloc(strlen(env) + 2); sprintf(cookiestr, "%s;", env); env = cookiestr; while (*env) { char *next = strstr(env, ";"); if (next) { /* Get this token */ c = realloc(c, sizeof(Envar)*(nc + 1)); c[nc].key = copyKey(env); c[nc].val = copyVal(env); nc++; /* find next token */ env = next + 1; while (*env && isspace(*env)) env++; } } /* Clean up crumbs! */ free(cookiestr); *n = nc; return c; }
void startStep() { chkinCounter = 0; if(stage == 0) //Initial distribution of points amongst chares { CkPrintf("The points are being distributed amongst chares. \n"); int tempX,tempY,i,j; double Xcoordinate,Ycoordinate; stage++; for(i=0;i<=7;i++) { for(j=0;j<=7;j++) list[i][j].head = NULL; } int alternator = 0; srand((unsigned)time(NULL)); for(i=0;i<TOTAL_PARTICLES;i++) { Xcoordinate = (double)rand()/(double)RAND_MAX; Ycoordinate = (double)rand()/(double)RAND_MAX; tempX = (Xcoordinate*8); tempY = (Ycoordinate*8); /*if((tempX <= 7) && (tempX >= 1) && (tempY <= 7) && (tempY >= 1)) { if(alternator == 0) { tempX = 0; tempY = 0; } else { tempX = 7; tempY = 7; } alternator = ((alternator + 1)%2); }*/ appendList(tempX,tempY,Xcoordinate, Ycoordinate); } CkPrintf("There are %d particles \n", TOTAL_PARTICLES); for(i=0;i<=7;i++) { for(j=0;j<=7;j++) copyVal(list[i][j],i,j); } } else if((stage>0)&&(stage <TOTAL_STEPS)) { totalParticles = 0; stage++; /*Re-initialized because we want to check for each iteration*/ /*if(++stage % LB_INTERVAL == 0) { CkPrintf("Load balancing for stage: %d \n",stage); pointsProxy.balanceLoad(); } else*/ pointsProxy.shiftPoints(); //Broadcast to all chares. } else if(stage == TOTAL_STEPS) { if(totalParticles == TOTAL_PARTICLES) { CkPrintf("There are still %d particles.\n",totalParticles); CkPrintf("Program finished successfully! \n"); } else CkPrintf("Some particles lost! \n"); CkExit(); } };