Beispiel #1
0
static int destroy_queues(void)
{
	int i, j, prios;

	prios = odp_schedule_num_prio();

	for (i = 0; i < prios; i++) {
		for (j = 0; j < QUEUES_PER_PRIO; j++) {
			char name[32];

			snprintf(name, sizeof(name), "sched_%d_%d_n", i, j);
			if (destroy_queue(name) != 0)
				return -1;

			snprintf(name, sizeof(name), "sched_%d_%d_a", i, j);
			if (destroy_queue(name) != 0)
				return -1;

			snprintf(name, sizeof(name), "sched_%d_%d_o", i, j);
			if (destroy_queue(name) != 0)
				return -1;

			snprintf(name, sizeof(name), "plain_%d_%d_o", i, j);
			if (destroy_queue(name) != 0)
				return -1;
		}
	}

	if (odp_pool_destroy(queue_ctx_pool) != 0) {
		fprintf(stderr, "error: failed to destroy queue ctx pool\n");
		return -1;
	}

	return 0;
}
Beispiel #2
0
void
test_AppendQueues(void) {
	queue* q1 = create_queue();
	queue* q2 = create_queue();
	queue* q3 = create_queue();
	queue* q4 = create_queue();
	queue* q5 = create_queue();

	// append empty queue to empty queue
	append_queue(q1, q2);

	element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
	e1_ptr = (element*)debug_get_node(sizeof(element));
	e2_ptr = (element*)debug_get_node(sizeof(element));
	e3_ptr = (element*)debug_get_node(sizeof(element));
	e4_ptr = (element*)debug_get_node(sizeof(element));
	e5_ptr = (element*)debug_get_node(sizeof(element));
	e6_ptr = (element*)debug_get_node(sizeof(element));

	enqueue(q1, e1_ptr);
	enqueue(q1, e2_ptr);
	enqueue(q1, e3_ptr);


	// append empty queue to non empty queue
	append_queue(q1, q3);
	TEST_ASSERT_EQUAL(3, get_no_of_elements(q1));

	// append non empty queue to empty queue
	append_queue(q4, q1);
	TEST_ASSERT_EQUAL(3, get_no_of_elements(q4));

	enqueue(q5, e4_ptr);
	enqueue(q5, e5_ptr);

	// append non empty queue to non empty queue
	append_queue(q4, q5);
	TEST_ASSERT_EQUAL(5, get_no_of_elements(q4));

	dequeue(q4);
	dequeue(q4);
	dequeue(q4);
	dequeue(q4);
	dequeue(q4);

	free_node(e1_ptr);
	free_node(e2_ptr);
	free_node(e3_ptr);
	free_node(e4_ptr);
	free_node(e5_ptr);

	TEST_ASSERT_EQUAL(0, get_no_of_elements(q4));

	destroy_queue(q1);
	destroy_queue(q2);
	destroy_queue(q3);
	destroy_queue(q4);
}
Beispiel #3
0
Alert get_alert(XmlElement xml_alert)
{
   Alert alert = malloc(sizeof(struct Alert));
   Queue alert_info = xml_element_children(xml_alert);

   while (!queue_empty(alert_info))
   {
      XmlElement el = queue_dequeue(alert_info);
      const char *element = xml_element_name(el);

      if (str_equals(element, "summary")) {
         alert->summary = strdup(xml_element_content(el));
      } else if (str_equals(element, "description")) {
         alert->description = strdup(xml_element_content(el));
      } else if (str_equals(element, "location")) {
         alert->location = strdup(xml_element_content(el));
      }

      free_xml_element(el);
   }

   destroy_queue(alert_info);

   return alert;
}// End of get_alert method
Beispiel #4
0
int judge()//判断失败与否
{
 LinkList p;
 if(snake.length >= MAX_FOOD){
  system("cls");
  gotoxy(4,20);
  puts("恭喜你,赢了!!!");
  exit(0);
 }
 //碰到自身
 p = snake.front->next;
 while(snake.rear !=  p){
  if(snake.rear->x == p->x && snake.rear->y == p->y){ break; }
  else{ p = p->next; }
 }
 if(snake.rear == p){
  //碰到边界
  if(snake.rear->x >= 1 && snake.rear->y >= 1 && snake.rear->x < MAX__X && snake.rear->y < MAX__Y){
   return 1;
  }
 }
 system("cls");
 gotoxy(4,20);
 puts("GAME OVER!!!");
 destroy_queue();
 getch();
 exit(0);
}
Beispiel #5
0
int main()
{
    int data_de = 0;         //用来保存出队的元素值

    //创建队列并进行入队测试
    PQUEUE pS = create_queue();
    en_queue(pS,2);
    en_queue(pS,4);
    en_queue(pS,6);
    traverse_queue(pS);

    //出队测试
    if(de_queue(pS,&data_de))
        printf("delete succeed,the deleted data is: %d\n",data_de);
    else
        printf("queue is empty! delete falied!\n");
    traverse_queue(pS);

    //销毁队列测试
    destroy_queue(pS);
    printf("queue destroyed!\n");
    traverse_queue(pS);

    return 0;
}
Beispiel #6
0
int
main(void)
{
    int i, r;
    c_queue *q = init_queue(5);
    int items[] = {1,2,3,4,5,6};

    for(i = 0; i < 5; i++) {
        enqueue(q, (queue_data_t)&items[i]);
    }
    r = enqueue(q, (queue_data_t)&items[5]);
    if(r != 1) {
        return 1;
    }

    for(i = 0; i < 3; i++) {
        r = *((int *)dequeue(q));
        printf("item=%d\n", r);
    }

    for(i = 0; i < 3; i++) {
        enqueue(q, (queue_data_t)&items[i]);
    }
    r = enqueue(q, (queue_data_t)&items[5]);
    if(r != 1) {
        return 1;
    }

    destroy_queue(q);

    return 0;
}
Beispiel #7
0
void
test_OneElementQueue(void) {
    queue* q = create_queue();

    TEST_ASSERT_NOT_NULL(q);

    element e = {"string", 3};
    element* e_ptr = debug_get_node(sizeof(element));
    enqueue(q, e_ptr);
    *e_ptr = e;

    TEST_ASSERT_FALSE(empty(q));
    TEST_ASSERT_NOT_NULL(queue_head(q));
    TEST_ASSERT_EQUAL(1, get_no_of_elements(q));

    element* e_ptr_returned = dequeue(q);

    TEST_ASSERT_NOT_NULL(e_ptr_returned);
    TEST_ASSERT_EQUAL_STRING(e_ptr_returned->str, "string");
    TEST_ASSERT_EQUAL_PTR(e_ptr_returned, e_ptr);
    TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
    TEST_ASSERT_TRUE(empty(q));
    TEST_ASSERT_NULL(dequeue(q));

    destroy_queue(q);
}
Beispiel #8
0
int
main() {
  queue_t *q;
  item_t t;
  int i,j;

  q = create_queue(3);
  i = 0;
  while( fscanf(stdin, "%d", &t) == 1 ) {
    if( ! t ) {
      if( ! i ) fprintf(stderr, "queue is alread empty\n");
      else {
	fprintf(stdout, "%d\n", dequeue(q));
	i--;
      }
    } else {
      enqueue(q, t);
      i++;
    }
  }

  for( j = 0; j < i; j++ ) {
    fprintf(stdout, "%d\n", dequeue(q));
  }

  destroy_queue(q);
  return 0;
}
Beispiel #9
0
int main()
{
	int msg_id = creat_msg_queue();
	if(msg_id <0)
	{
		printf("%d : %s\n",errno,strerror(errno));
		return 1;
	}

	char buf[_SIZE_];
	while(1)
	{
		memset(buf,'\0',sizeof(buf));
		recv_msg(msg_id,client_type,buf);
		printf("client:%s\n",buf);
		if(strcasecmp(buf,"quit") == 0)
		{
			break;
		}

		printf("client say done,Please Enter# ");
		fflush(stdout);
		ssize_t _s = read(0,buf,sizeof(buf)-1);
		if(_s > 0)
		{
			buf[_s - 1] = '\0';
		}

		send_msg(msg_id,server_type,buf);

	}

	destroy_queue(msg_id);
	return 0;
}
Beispiel #10
0
int main(void)
{
	struct queue queue;
	int i;
	init_queue(&queue);
	for (i = 0; i < MAX_QUEUE_SIZE; i++) {
		enqueue(&queue, i);
	}
	print_queue(&queue);
	if (1 != is_queue_full(&queue))
		enqueue(&queue, 10);
	print_queue(&queue);
	fprintf(stdout, "front :%d, rear :%d\n",
			queue.front, queue.rear);
	int data;
	fprintf(stdout, "dequeue\n");
	dequeue(&queue, &data);
	fprintf(stdout, "data :%d\n", data);
	enqueue(&queue, 11);
	fprintf(stdout, "front :%d, rear :%d\n",
			queue.front, queue.rear);
	print_queue(&queue);
	destroy_queue(&queue);
	
	return 0;
}
void test_empty() {
  queue *q = create_queue();

  assert(empty(q));

  destroy_queue(q);
}
Beispiel #12
0
void destroy_game(void) {
  destroy_blockmap(impl.bm);
  destroy_canvas(impl.cvs);
  destroy_canvas(impl.pnl);
  destroy_shapebuf(impl.sb);
  destroy_queue(impl.queue);
  destroy_ui();
}
Beispiel #13
0
void 
destroy_block_queue(block_queue *p)
{
    pthread_mutex_destroy(&(p->lock));
    pthread_cond_destroy(&(p->notEmpty));
    pthread_cond_destroy(&(p->notFull));
    destroy_queue(p->queue);
    free(p);
}
Beispiel #14
0
/* Define a function to append a queue onto another.
 * Note: there is a faster way (O(1) as opposed to O(n))
 * to do this for simple (FIFO) queues, but we can't rely on
 * that for priority queues. (Given the current representation)
 * 
 * I don't anticipate this to be a problem. If it does turn
 * out to be a bottleneck, I will consider replacing the 
 * current implementation with a binomial or fibonacci heap.
 */
void append_queue(
	queue *q1,
	queue *q2
	) 
{
	while (!empty(q2))
		enqueue(q1, dequeue(q2));
	destroy_queue(q2);
}
Beispiel #15
0
void
expect_new_queues_to_not_be_null() {
  Queue *q = new_queue();

  assert(q != NULL);
  assert(q->in != NULL);
  assert(q->out != NULL);

  destroy_queue(q);
}
Beispiel #16
0
void
test_CustomOrderQueue(void) {
    queue* q = debug_create_priority_queue(compare_elements);
    element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;

    e1_ptr = (element*)debug_get_node(sizeof(element));
    e2_ptr = (element*)debug_get_node(sizeof(element));
    e3_ptr = (element*)debug_get_node(sizeof(element));
    e4_ptr = (element*)debug_get_node(sizeof(element));
    e5_ptr = (element*)debug_get_node(sizeof(element));
    e6_ptr = (element*)debug_get_node(sizeof(element));

    e1_ptr->number = 1;
    e2_ptr->number = 1;
    e3_ptr->number = 10;
    e4_ptr->number = 10;
    e5_ptr->number = 100;
    e6_ptr->number = 100;

    enqueue(q, e3_ptr);
    enqueue(q, e5_ptr);
    enqueue(q, e2_ptr);
    enqueue(q, e1_ptr);
    enqueue(q, e4_ptr);
    enqueue(q, e6_ptr);

    TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
    TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);

    TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
    TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);

    TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
    TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);

    TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
    TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);

    TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
    TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);

    TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
    TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);

    TEST_ASSERT_TRUE(empty(q));

    destroy_queue(q);

    free_node(e1_ptr);
    free_node(e2_ptr);
    free_node(e3_ptr);
    free_node(e4_ptr);
    free_node(e5_ptr);
    free_node(e6_ptr);
}
Beispiel #17
0
int pomme_tp_distroy(pomme_tpool_t *ptp)
{
    int ret = 0;
    assert( ptp != NULL );
    if( ptp->stoped != 1)
    {
	ptp->stop(ptp);
    }

    destroy_queue(ptp->workers);
    destroy_queue(ptp->finished);

    free(ptp->tids);

    ret = sem_destroy(&ptp->sem);

    memset(ptp, 0, sizeof(ptp));

    return ret;
}
Beispiel #18
0
void
test_EmptyQueue(void) {
    queue* q = create_queue();

    TEST_ASSERT_NOT_NULL(q);
    TEST_ASSERT_TRUE(empty(q));
    TEST_ASSERT_NULL(queue_head(q));
    TEST_ASSERT_NULL(dequeue(q));
    TEST_ASSERT_EQUAL(0, get_no_of_elements(q));

    destroy_queue(q);
}
Beispiel #19
0
void
expect_queue_to_accept_many_elements(int n_elements) {
  int i;
  Queue *q = new_queue();

  for (i = 0; i < n_elements; i++) {
    assert(push_queue(q, i) == 0);
  }

  for (i = 0; i < n_elements; i++) {
    assert(pop_queue(q) == i);
  }

  destroy_queue(q);
}
Beispiel #20
0
int main()
{
	Queue q = create_queue(2);
	
	enqueue(q, 'a');
	enqueue(q, 'b');
	enqueue(q, 'c');
	
	printf("dequeue:%c\n", dequeue(q));
	printf("dequeue:%c\n", dequeue(q));
	printf("dequeue:%c\n", dequeue(q));
	
	destroy_queue(q);
	
	return 0;
}
void test_all() {
  queue *q = create_queue();

  enqueue(q, 100);
  assert(empty(q) == false);
  assert(dequeue(q) == 100);
  enqueue(q, 200);
  enqueue(q, 300);
  enqueue(q, 400);
  assert(dequeue(q) == 200);
  assert(dequeue(q) == 300);
  assert(dequeue(q) == 400);

  assert(empty(q));

  destroy_queue(q);
}
Beispiel #22
0
void snake_move()//实现玩家控制蛇的移动
{
 char c,pause;
 static char temp = 0;//静态局部变量
 pause = 0;
 if( !temp){//一开始的时候让蛇先自动移动
  temp = 'd';
  snake_auto_move(temp);
 }
 while(1){
  c = getch();
  if(c == ESC){//退出
   system("cls");
   puts("游戏退出成功!");
   system("pause");
   destroy_queue();
   exit(0);
  }
  if(pause == SPACE){
   if(c == SPACE){//再按下空格键继续游戏
    pause = 0;
    gotoxy(6,20);
    printf("           ");//消除~~Pause~~:
    snake_auto_move(temp);
   }
   continue;
  }
  if(c == SPACE){//按空格键暂停游戏
   pause = SPACE;
   gotoxy(6,20);
   printf("~~Pause~~:");
   continue;
  }
  if(c == 'w' || c == 'a' || c == 's' || c == 'd'){
   if((temp == 'w' && c == 's') || (temp == 's' && c == 'w') || (temp == 'd' && c == 'a') || (temp == 'a' && c == 'd')){//不允许连续的两次内按相反的键
    snake_auto_move(temp);
    continue;
   }
   break;
  }
  snake_auto_move(temp);
 }
 temp = c; 
 snake_auto_move(temp);
}
Beispiel #23
0
void destroy_supervisor(supervisor_thread_t *thiz) {
    if(thiz) {
        int w = 0;
        for(w = 0; w < thiz->config->num_workers; w++) {
            destroy_worker(thiz->worker_threads[w]);
        }
        thiz->worker_threads = NULL;
        destroy_rate_limiter(thiz->rate_limiter);
        destroy_queue(thiz->queue);
        destroy_config(thiz->config);
        destroy_worker_array();
        TESR_LOG_FREE(thiz, supervisor_thread_t);
        free(thiz);
        thiz = NULL;
    } else {
        LOG_ERROR("can not free supervisor_thread_t* as it is NULL");
    }
}
Beispiel #24
0
/*
   get_alerts(filename) Loads the alerts from file.
*/
Queue get_alerts(const char *filename)
{
   XmlDocument doc = load_xml_document(filename);
   XmlElement root = xml_document_root_node(doc);

   Queue xml_alerts = xml_element_children(root);
   Queue alerts = create_queue(destroy_alert);

   while (!queue_empty(xml_alerts))
   {
      XmlElement el_alert = queue_dequeue(xml_alerts);
      queue_queue(alerts, get_alert(el_alert));
      free_xml_element(el_alert);
   }// End of while

   destroy_queue(xml_alerts);

   return alerts;
}// End of get_alerts method
Beispiel #25
0
int tp_destroy_thread_pool(struct thread_pool *pool)    // , struct work_queue* wq )
{
    int i = 0;

/*    /// tell all threads to exit
    for(i=0; i<pool->num_threads; i++){
        pool->arg1[i] = arg_invalid;  // pass an invalid args, tell thread i to terminate
        sem_post( &pool->sem[i] );    // awake thread i
        //dbg(" resume thread %d\n", i);
    }    
*/

    printf("start to destroy thread_pool \"%s\" ...\n", pool->name);
    for (i = 0; i < pool->num_threads; i++) {
        workqueue_enqueue(pool->queue, NULL, 0, arg_invalid, arg_invalid);
    }

    /// wait for all thread to terminate
    for (i = 0; i < pool->num_threads; i++) {
        pthread_join(pool->thread[i], NULL);
        //dbg(" join thread %d\n", i);
    }

    ///////// mutex and bitmap are not necessary now
    pthread_mutex_destroy(&pool->mutex);
    //bmp_destroy( & pool->bitmap);
    ///////////////

    for (i = 0; i < pool->num_threads; i++) {
        //sem_destroy( &pool->sem[i] );
    }

    if (pool->queue) {
        destroy_queue(pool->queue);
        pool->queue = NULL;
    }

    free(pool);
    printf("thread_pool \"%s\" released...\n", pool->name);

    return i;                   // return num of threads terminated
}
Beispiel #26
0
int main(void)
{
   // Setup modules
   setup_xml();

   Queue alerts = get_alerts("test.xml");

   while(!queue_empty(alerts))
   {
      Alert alert = queue_dequeue(alerts);
      printf("%s\n", alert->summary);
      printf("  For: %s\n", alert->location);
      printf("  %s\n", alert->description);
   }// End of while

   destroy_queue(alerts);

   // Cleanup modules
   cleanup_xml();
}// End of main method
Beispiel #27
0
void
expect_push_queue_and_pop_queue_to_work_consistently() {
  Queue *q = new_queue();

  assert(push_queue(q, 1) == 0);
  assert(push_queue(q, 2) == 0);
  assert(push_queue(q, 3) == 0);
  assert(push_queue(q, 4) == 0);
  assert(push_queue(q, 5) == 0);

  assert(pop_queue(q) == 1);
  assert(pop_queue(q) == 2);
  assert(pop_queue(q) == 3);
  assert(pop_queue(q) == 4);
  assert(pop_queue(q) == 5);

  assert(pop_queue(q) == -1);

  destroy_queue(q);
}
Beispiel #28
0
int main()
{
	queue_t *q1 = mk_queue();
	
	printf("%d\n", get_len(q1));
	printf("%d\n", is_queue_empty(q1));
	
	enqueue(q1, mk_task(f1,(void *) 5));
	enqueue(q1, mk_task(f2, (void *)7));

	printf("%d\n", get_len(q1));
	printf("%d\n", is_queue_empty(q1));

	enqueue(q1, mk_task(f2, (void *)2));
	enqueue(q1, mk_task(f1, (void *)9));
	
	printf("%d\n", get_len(q1));
	printf("%d\n", is_queue_empty(q1));
	
	run_task(dequeue(q1));
	run_task(dequeue(q1));
	
	printf("%d\n", get_len(q1));
	printf("%d\n", is_queue_empty(q1));
	
	run_task(dequeue(q1));
	run_task(dequeue(q1));
	
	printf("%d\n", get_len(q1));
	printf("%d\n", is_queue_empty(q1));
	
	empty_queue(q1);		
	
	enqueue(q1, mk_task(f2, (void *)2));
	enqueue(q1, mk_task(f1, (void *)9));
	
	printf("%d\n", get_len(q1));
	printf("%d\n", is_queue_empty(q1));

	destroy_queue(q1);
}
Beispiel #29
0
void
test_DestroyNonEmptyQueue(void) {
    queue* q = create_queue();
    element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;

    e1_ptr = (element*)debug_get_node(sizeof(element));
    e2_ptr = (element*)debug_get_node(sizeof(element));
    e3_ptr = (element*)debug_get_node(sizeof(element));
    e4_ptr = (element*)debug_get_node(sizeof(element));
    e5_ptr = (element*)debug_get_node(sizeof(element));
    e6_ptr = (element*)debug_get_node(sizeof(element));

    enqueue(q, e3_ptr);
    enqueue(q, e2_ptr);
    enqueue(q, e4_ptr);
    enqueue(q, e1_ptr);
    enqueue(q, e6_ptr);
    enqueue(q, e5_ptr);

    destroy_queue(q);
}
Beispiel #30
0
void
test_MultipleElementQueue(void) {
    queue* q = create_queue();

    TEST_ASSERT_NOT_NULL(q);

    element *e1_ptr, *e2_ptr, *e3_ptr;

    e1_ptr = (element*)debug_get_node(sizeof(element));
    e2_ptr = (element*)debug_get_node(sizeof(element));
    e3_ptr = (element*)debug_get_node(sizeof(element));

    enqueue(q, e1_ptr);
    enqueue(q, e2_ptr);
    enqueue(q, e3_ptr);

    TEST_ASSERT_EQUAL(3, get_no_of_elements(q));

    dequeue(q);
    enqueue(q, e1_ptr);

    TEST_ASSERT_EQUAL(3, get_no_of_elements(q));

    dequeue(q);
    dequeue(q);
    enqueue(q, e3_ptr);
    enqueue(q, e2_ptr);

    TEST_ASSERT_EQUAL_PTR(dequeue(q), e1_ptr);
    TEST_ASSERT_EQUAL_PTR(dequeue(q), e3_ptr);
    TEST_ASSERT_EQUAL_PTR(dequeue(q), e2_ptr);
    TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
    TEST_ASSERT_NULL(dequeue(q));

    destroy_queue(q);
}