示例#1
0
文件: main_bag.c 项目: Merfoo/CS-261
int main(int argc, char* argv[]){
  if(argc==2)
    {
      struct bag* b = (struct bag*)malloc(sizeof(struct bag));/*Create new bag*/
      initBag(b);/*Initialize*/
      char* s=argv[1];
      int n = atoi(s);/*number of elements to add*/
      int i;
      for( i = 1; i < n; ++i)
    {
	    addFrontList(b->l, (TYPE)(i));/*Add elements*/
    }
        addToBag(b, (TYPE)9);
        addToBag(b, (TYPE)3);
        addToBag(b, (TYPE)9);
     double t1 = getMilliseconds();/*Time before contains()*/
      printf("Found? %d\n", bagContains(b, (TYPE)20));
      double t2 = getMilliseconds();/*Time after contains()*/
        printf("Size: %d\n", b->l->size);
        removeFromBag(b, (TYPE)9);
        printf("Size: %d\n", b->l->size);
        addFrontList(b->l, 10.0);
        printf("Front: %f\n", frontList(b->l));
      printf("%d %g\n", n, t2-t1);
        freeBag(b);
    }
  else
  {
      printf("Please enter the number of elements to add.\n");
                }

  return 0;

}
示例#2
0
void initPlayer(Player *p, int player_id) {
  p->player_id = player_id;
  p->name[0] = '\0';
  p->money = 0;
  p->pos.x = p->pos.y = 0;
  p->is_goal = 0;
  p->ranking = 1;

  initBag(&p->bag, BAG_SIZE);
  initPositionList(&p->footmark);
}
示例#3
0
bool shop::init(){
    if (!CCLayer::init()) {
        return false;
    }
    setTouchEnabled(true);
    layer=UILayer::create();
    this->addChild(layer);
    layer->addWidget(CCUIHELPER->createWidgetFromJsonFile("shopLayer_1.json"));
    socket=GameData::shareGameData()->socket;
    UIButton * btn= dynamic_cast<UIButton *>(layer->getWidgetByTag(3));
    btn->addReleaseEvent(this, coco_releaseselector(shop::menuCallBack));
    initLoadSkill();
    initShop();
    initBag();
    return true;
}
示例#4
0
文件: main.c 项目: Mankee/CS261
int main(){

	struct bag* b = (struct bag*)malloc(sizeof(struct bag));/*Create new bag*/
	initBag(b);/*Initialize*/

    printf("size of list = %d \n", b->lst->size);
    printf("\n");

    addFrontList(b->lst, 3);
    addFrontList(b->lst, 2);
    addBackList(b->lst, 4);
    addBackList(b->lst, 5);
    addBackList(b->lst, 6);
    addFrontList(b->lst, 1);

    int i;
    struct DLink *currentlink = b->lst->head->next;
    for(i = 1; i <= b->lst->size; i++){
            printf("index %d = %d \n", i, currentlink->value);
            currentlink = currentlink->next;
    }
    printf("\n");
    printf("front = %d \n", frontList(b->lst));
    printf("back = %d \n", backList(b->lst));
    printf("is list empty? = %d \n", isEmptyList(b->lst));
    printf("size of list = %d \n", b->lst->size);
    printf("list contains = %d \n", listContains(b->lst, 12));

    printf("\n");
    addToBag(b, 10);
    removeFromBag(b, 1);
    struct DLink *link = b->lst->head->next;
    for(i = 1; i <= b->lst->size; i++){
            printf("index %d = %d \n", i, link->value);
            link = link->next;
    }
    printf("list contains = %d \n", bagContains(b, 100));

    return 0;

}
示例#5
0
int main(int argc, char *argv[])
{
	uint32_t i, j, k;
	uint32_t m;
	uint32_t byte, bit;
	struct sigaction msa;
	struct sigaction csa;
	uint64_t object_size =  BYTES + 1024*1024;
	int opt;

	/* child variables */
	uint32_t nmult;
	uint32_t mpert;
	uint32_t temp;
	uint32_t a;
	uint32_t cbyte, cbit;
	uint32_t start, end;
	uint32_t prime;

	if (argc < 2)
	{
		printf("Indicate the number of threads.\n");
		exit(EXIT_FAILURE);
	}
	
	/* map shared memory object, allocate into it */
	nproc = atoi(argv[1]);
	if (nproc > MAX_PROC)
	{
		printf("The process limit is 8.\n");
		exit(EXIT_FAILURE);
	}
	path = "/hari_primes";
	pstruct = mount_shmem(path, object_size);
	cfinder = (struct compFinder *) pstruct;
	bzero(cfinder, sizeof(struct compFinder));

	cfinder->nlist = (unsigned char *) (&cfinder[1]);
	find = &cfinder->find[0];
	complete = &cfinder->complete[0];
	getid = (sem_t *) (&cfinder->nlist[BYTES]);

	/* initialize composite finder struct and number list */
	bzero(cfinder->nlist, BYTES);
	cfinder->nproc = nproc;

	/* initialize semaphores */
	for (i = 0; i < nproc; i++)
	{
		sem_init(&find[i], 1, 0);
		sem_init(&complete[i], 1, 0);
	}

	sem_init(getid, 1, 1);

	/* install signal handler */
	sigemptyset(&msa.sa_mask);
	msa.sa_flags = 0;
	msa.sa_handler = mhandler;
	if (sigaction(SIGINT, &msa, NULL) == -1)
	{
		int j;
		for (j = 0; j < cfinder->nproc; j++)
		{
			sem_destroy(&find[j]);
			sem_destroy(&complete[j]);
		}
		sem_destroy(getid);
	
		for (j = 0; j < nproc; j++)
			wait(NULL);

		if (shm_unlink(path) == -1)
		{
			perror("unlink shared memory\n");
			exit(EXIT_FAILURE);
		}
		
		exit(EXIT_FAILURE);

	}


	/* initialize mask */
	for (i = 0; i < 8; i++)
	{
		cfinder->mask[i] = 1 << (8-i-1);
	}

	cfinder->total = (uint32_t) ((unsigned long)(BYTES) * 8 - 1);

	/* mark the number 1 as special */
	cfinder->nlist[0] = cfinder->nlist[0] | cfinder->mask[1];
	cfinder->done = 0;

	/* create composite marking processes */
	for (i = 0; i < nproc; i++)
	{
		switch(fork())
		{
			case -1:
		
				for (j = 0; j < nproc; j++)
				{
					sem_destroy(&find[j]);
					sem_destroy(&complete[j]);
				}
				sem_destroy(getid);
				if (shm_unlink(path) == -1)
				{
					perror("unlink pstruct\n");
					exit(EXIT_FAILURE);
					perror("forking");
				}
		
				exit(EXIT_FAILURE);
				break;
			case 0: /* child */
				
				/* install child signal handler */
				sigemptyset(&csa.sa_mask);
				csa.sa_flags = 0;
				csa.sa_handler = chandler;
				if (sigaction(SIGINT, &csa, NULL) == -1)
				{
					exit(EXIT_FAILURE);
				}

				/* get process number */
				sem_wait(getid);
				temp = cfinder->procNo;
				cfinder->procNo++;
				sem_post(getid);
				/* wait for signal and get prime */
				while(1)
				{
					sem_wait(&cfinder->find[temp]);
					if (cfinder->done)
						break;
					prime = cfinder->prime;
					nmult = cfinder->total / prime;
					mpert = nmult / cfinder->nproc;
			
	
					if (!mpert)
					{
						/* multiples per thread greater
						   than the number of threads */
						for (a = 0; a < nmult - 1; a++)
						{
							if (temp == a)
							{
								start = (a + 2) * prime;
								end = (a + 2) * prime;
							}
						}
		
						for (a = nmult - 1; a < cfinder->nproc; a++)
						{
							/* for inactive threads
							 just make start
							 arbitrarily greater
							 than end */
							if (temp == a)
							{
								start = 4;
								end = 2;
							}
						}
					}
					else	
					{	
						/* set start composite number */
						if (!temp)
							start = 2 * prime;
						else
						{
							start = (temp * mpert + 2) * prime;
							/* set start to first
							   multiple in byte */
							while (1)
							{
								if ( (start / 8) != ((start - prime) / 8))
								{
									/* first
									multiple
									in byte
									*/
									break;
								}
								start += prime;
							}
						}	
				
						/* set end composite number */	
						if (temp == (cfinder->nproc - 1))
						{
							end = nmult * prime;
						}
						else
						{
							end = ((temp + 1) * mpert + 1) * prime;
							while(1)
							{
								/* set end to
								 last multiple
								 of byte */
								if ( ((end + prime) / 8) != (end / 8))
								{
									/* last
									multiple
									of byte
									*/
									break;
								}
								end += prime;
							}
						}	
					}
					for (a = start; a <= end; a += prime)
					{
						if (!(a % 2) && prime != 2)
						{
							if ( (cfinder->total - a) < prime)
								break;
							continue;
						}
						cbyte = a / 8;
						cbit = a % 8;
						cfinder->nlist[cbyte] = cfinder->nlist[cbyte] | cfinder->mask[cbit];
						if ( (cfinder->total - a) < prime)
							break;
					}
					sem_post(&cfinder->complete[temp]);
				}
				sem_post(&cfinder->complete[temp]);

				/* happy/sad determination */
				sem_wait(&cfinder->find[temp]);
				if (cfinder->happy | cfinder->sad)
				{
					/* divide up list of numbers */
					struct bag *hcheck = (struct bag *) malloc(sizeof(struct bag));
					char buf[33];
					if (!temp)
						start = 0;
					else
						start = temp * (BYTES / cfinder->nproc);
					if (temp == (cfinder->nproc - 1))
						end = BYTES - 1;
					else 
						end = (temp + 1) * (BYTES / cfinder->nproc) - 1;

					/* iterate through prime numbers in region */
					for (cbyte = start; cbyte <= end; cbyte++)
					{
						for (cbit = 0; cbit < 8; cbit++)
						{
							i = 8 * cbyte + cbit;
						/* algorithm similar to that shown in 
						   wikipedia page on happy/sad primes */
							if (!(cfinder->nlist[cbyte] & cfinder->mask[cbit]))
							{
								prime = i;
								initBag(hcheck);
								addToBag(hcheck, 0);
								while ((i > 1) && (!bagContains(hcheck,i)))
								{
									addToBag(hcheck, i);
									sprintf(&buf[0], "%u", i);
									i = calcInterm(&buf[0]);

								}
								if (i == 1 && cfinder->phappy)
								{
									printf("happy: %u\n", prime);
								}

								else if (i != 1 && cfinder->psad)
								{
									if (i)	/* i != 0 */
										printf("sad: %u\n", prime);
								}
								else {
								}

								freeBag(hcheck);	
							}
						}
					}
					free(hcheck);
				}

				exit(EXIT_SUCCESS);
				break;
			default:
				
				break;
		}
	}
	/* perform sieve, mark off composites */
	for (i = 2; i <= sqrt(cfinder->total);)
	{
		/* find first unmarked number */
		j = i;
		while(j < cfinder->total)
		{
			byte = j / 8;
			bit = j % 8;
			if (!(cfinder->nlist[byte] & cfinder->mask[bit]))
			{
				break;
			}
			j++;
		}
		if (j >= cfinder->total)
			break;
		cfinder->prime = j;
		/* allowing threads now to cross off composites */
		for(k = 0; k < nproc; k++)
			sem_post(&find[k]);
	
		/* waiting for all threads to finish before getting next prime 
		 */
		for (k = 0; k < nproc; k++)
		{
			if (sem_wait(&complete[k])==-1)
				perror("error\n");
		}
		i = ++j; 
	}
	cfinder->done = 1;

	/* telling processes to terminate */
	for(k = 0; k < nproc; k++)
		sem_post(&find[k]);

	for (k = 0; k < nproc; k++)
		sem_wait(&complete[k]);

	/* check what to do next */
	while ((opt = getopt(argc, argv, "phs")) == 'p')
	{
		printBitMap(cfinder, 1, cfinder->total);
	}

	/* set the proper flags */
	while (opt != -1)
	{
		if (opt == 'h')
		{
			printf("happy primes will be found\n");
			cfinder->happy = 1;
			if (getopt(argc, argv, "phs") == 'p')
			{
				printf("happy primes will be printed \n");
				cfinder->phappy = 1;
			}
		}
		else if (opt == 's')
		{
			printf("sad primes will be found\n");
			cfinder->sad = 1;
			if (getopt(argc, argv, "phs") == 'p')
			{
				printf("sad primes will be printed\n");
				cfinder->psad = 1;
			}
		}
		else
		{
			printf("we're done \n");
		}
		opt = getopt(argc, argv, "phs"); 
	}

	/* start up processes again after setting flags */
	for(k = 0; k < nproc; k++)
		sem_post(&find[k]);

	for (k = 0; k < nproc; k++)
		wait(NULL); 

	/* destroy semaphores, delete shared memory object */
	for (j = 0; j < nproc; j++)
	{
		sem_destroy(&find[j]);
		sem_destroy(&complete[j]);
	}
	sem_destroy(getid);
	if (shm_unlink(path) == -1)
	{
		perror("unlink pstruct\n");
		exit(EXIT_FAILURE);
	}
	
	return 0;
}