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}
Exemple #2
0
/** 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();
			}
		};