示例#1
0
int main(int argc, char** argv)
{
  int i;
  test_reallocate();
  {
    deque_t d;
    int lots = 2;
    deque_init(4, &d, 0);
    push_front_counting(4, &d, lots);
    //print_deque(4, &d);
    pop_back_check_counting(4, &d, lots);
    //print_deque(4, &d);
    check_empty(4, &d);
    deque_destroy(&d);
  }
  for( i = 0; i < 32; i++ ) {
    test_deque(i);
  }
  for( i = 127; i < 512; i++ ) {
    test_deque(i);
  }
  test_deque(1 << 15);

  printf("deque_test PASS\n");
  return 0;
}
示例#2
0
文件: qbuffer.c 项目: hildeth/chapel
qioerr qbuffer_init(qbuffer_t* buf)
{
  memset(buf, 0, sizeof(qbuffer_t));
  DO_INIT_REFCNT(buf);
  return deque_init(sizeof(qbuffer_part_t), & buf->deque, 0);
  //return 0;
}
示例#3
0
thread_pool_t* thread_pool_create(int max_thread_num){
	int i, ret;

    if (max_thread_num <= 0 || max_thread_num > MAX_THREAD_NUM){
		return NULL;
	}
	thread_pool_t *self = (thread_pool_t*)malloc(sizeof(thread_pool_t));
	self->working_threads_num = 0;
	self->alive_threads_num = 0;
	self->keep_alive = 1;
	self->max_thread_num = max_thread_num;
	self->thread_id_array = (pthread_t*)malloc(sizeof(pthread_t) *self->max_thread_num);
	self->task_deque = (task_deque_t*)malloc(sizeof(task_deque_t));
	deque_init(self->task_deque);
	pthread_mutex_init(&self->threads_num_mutex, NULL);
	pthread_cond_init(&self->threads_all_idle_cond, NULL);
	
	self->task_sem = (task_sem_t*)malloc(sizeof(task_sem_t));
	task_sem_init(self->task_sem);

	for (i = 0; i < self->max_thread_num; i++){
		ret = pthread_create(&self->thread_id_array[i], NULL, thread_pool_thread_do, self);
	}

	/*等待线程全部创建好*/
	while(self->alive_threads_num != self->max_thread_num){
	}
	return self;
}
示例#4
0
/* deque_t */
void _type_init_deque(const void* cpv_input, void* pv_output)
{
    bool_t b_result = false;
    assert(cpv_input != NULL && pv_output != NULL);

    b_result = _create_deque_auxiliary((deque_t*)cpv_input, (char*)pv_output);
    assert(b_result);
    /* initialize deque_t */
    deque_init((deque_t*)cpv_input);
}
示例#5
0
/**
 * Initialize an empty queue adaptor
 */
void queue_init(queue_t* pque_queue)
{
    assert(pque_queue != NULL);

#ifdef CSTL_QUEUE_LIST_SEQUENCE
    list_init(&pque_queue->_t_sequence);
#else
    deque_init(&pque_queue->_t_sequence);
#endif
}
示例#6
0
/**
 * Initialize an empty stack adaptor
 */
void stack_init(cstl_stack_t* psk_stack)
{
    assert(psk_stack != NULL);

#if defined (CSTL_STACK_VECTOR_SEQUENCE)
    vector_init(&psk_stack->_t_sequence);
#elif defined (CSTL_STACK_LIST_SEQUENCE)
    list_init(&psk_stack->_t_sequence);
#else
    deque_init(&psk_stack->_t_sequence);
#endif
}
示例#7
0
int main(int argc, char* argv[])
{
    deque_t* pdeq_coll = NULL;
    person_t t_person;

    type_register(person_t, NULL, NULL, NULL, NULL);
    pdeq_coll = create_deque(person_t);
    if(pdeq_coll == NULL)
    {
        return -1;
    }

    deque_init(pdeq_coll);

    memset(t_person.s_firstname, '\0', 21);
    memset(t_person.s_lastname, '\0', 21);
    strcpy(t_person.s_firstname, "Jonh");
    strcpy(t_person.s_lastname, "right");
    deque_push_back(pdeq_coll, &t_person);
    memset(t_person.s_firstname, '\0', 21);
    memset(t_person.s_lastname, '\0', 21);
    strcpy(t_person.s_firstname, "Bill");
    strcpy(t_person.s_lastname, "killer");
    deque_push_back(pdeq_coll, &t_person);
    memset(t_person.s_firstname, '\0', 21);
    memset(t_person.s_lastname, '\0', 21);
    strcpy(t_person.s_firstname, "Jonh");
    strcpy(t_person.s_lastname, "sound");
    deque_push_back(pdeq_coll, &t_person);
    memset(t_person.s_firstname, '\0', 21);
    memset(t_person.s_lastname, '\0', 21);
    strcpy(t_person.s_firstname, "Bin");
    strcpy(t_person.s_lastname, "lee");
    deque_push_back(pdeq_coll, &t_person);
    memset(t_person.s_firstname, '\0', 21);
    memset(t_person.s_lastname, '\0', 21);
    strcpy(t_person.s_firstname, "Lee");
    strcpy(t_person.s_lastname, "bird");
    deque_push_back(pdeq_coll, &t_person);

    algo_for_each(deque_begin(pdeq_coll), deque_end(pdeq_coll), _print);
    printf("\n");

    algo_sort_if(deque_begin(pdeq_coll), deque_end(pdeq_coll), _person_sort_criterion);

    algo_for_each(deque_begin(pdeq_coll), deque_end(pdeq_coll), _print);
    printf("\n");

    deque_destroy(pdeq_coll);

    return 0;
}
示例#8
0
文件: deque.c 项目: vaughan0/vlib
static int deque_basic() {
  Deque d[1];
  deque_init(d, sizeof(int), 10);

  *(int*)deque_pushback(d) = 2;
  *(int*)deque_pushback(d) = 3;
  *(int*)deque_pushfront(d) = 1;
  *(int*)deque_pushback(d) = 4;
  *(int*)deque_pushfront(d) = 0;

  for (int i = 0; i <= 4; i++) {
    int val = *(int*)deque_front(d);
    deque_popfront(d);
    assertEqual(i, val);
    assertEqual(4-i, deque_size(d));
  }

  deque_close(d);
  return 0;
}
示例#9
0
文件: deque.c 项目: vaughan0/vlib
static int deque_fuzz() {
  Deque d[1];
  for (size_t cap = 1; cap <= 10; cap++) {
    deque_init(d, sizeof(int), cap);

    for (int i = 0; i < 5; i++) {
      *(int*)deque_pushback(d) = 4 - i;
    }
    for (int i = 0; i < 5; i++) {
      *(int*)deque_pushfront(d) = 5 + i;
    }

    for (int i = 0; i < 10; i++) {
      int val = *(int*)deque_back(d);
      deque_popback(d);
      assertEqual(i, val);
    }

    assertEqual(0, deque_size(d));
    deque_close(d);
  }
  return 0;
}
示例#10
0
void test_reallocate(void)
{
  // hit the different reallocate cases.
  // map_size > 2* num_new_nodes
  // add to front, add to back

  {
    // start with copy forward/copy backward.
    deque_node_t nodes[4];

    nodes[0].data = (void*) 0x100;
    nodes[1].data = (void*) 0x101;
    nodes[2].data = (void*) 0x102;
    nodes[3].data = (void*) 0x103;

    // test overlapping copy forward.
    // dstBeg should be before srcBegin
    _deque_map_copy_forward( &nodes[2], &nodes[4], &nodes[1]);
    assert(nodes[0].data == (void*) 0x100);
    assert(nodes[1].data == (void*) 0x102);
    assert(nodes[2].data == (void*) 0x103);
    assert(nodes[3].data == (void*) 0x103);


    nodes[0].data = (void*) 0x100;
    nodes[1].data = (void*) 0x101;
    nodes[2].data = (void*) 0x102;
    nodes[3].data = (void*) 0x103;


    // test overlapping copy backward.
    // dstEnd should be after srcEnd
    _deque_map_copy_backward( &nodes[0], &nodes[2], &nodes[3]);
    assert(nodes[0].data == (void*) 0x100);
    assert(nodes[1].data == (void*) 0x100);
    assert(nodes[2].data == (void*) 0x101);
    assert(nodes[3].data == (void*) 0x103);
  }

  // Now, suppose we've allocated our stuff...
  // let's reallocate.
  {
    deque_t d;
    qioerr err;
    ssize_t saved_size;
    deque_node_t saved_nodes[2*_DEQUE_INITIAL_MAP_SIZE];
    deque_node_t* cur;
    int i;

    // this time, try with map_size < 2*num_new_nodes
    err = deque_init(16, &d, 16*_DEQUE_INITIAL_MAP_SIZE);
    assert(!err);

    // save the pointers.
    assert(d.map_size < 2*_DEQUE_INITIAL_MAP_SIZE);// fits in test buffer
    saved_size = 0;
    for( cur = d.start.node; cur < d.finish.node; ++cur ) {
      saved_nodes[saved_size++].data = cur->data;
    }

    _deque_reallocate_map(16, 512, /* first two args dont matter in this test*/
                          &d, 1, 0 /* not at front */);
    assert(d.map_size > saved_size); // make sure it grew
    i = 0;
    for( cur = d.start.node; cur < d.finish.node && i < saved_size; ++cur ) {
      assert(saved_nodes[i++].data == cur->data);
    } 
    // don't care value of nodes[saved_size], the new slot.

    deque_destroy(&d);

    err = deque_init(16, &d, 16*_DEQUE_INITIAL_MAP_SIZE);
    assert(!err);

    assert(d.map_size < 2*_DEQUE_INITIAL_MAP_SIZE);// fits in test buffer
    saved_size = 0;
    for( cur = d.start.node; cur < d.finish.node; ++cur ) {
      saved_nodes[saved_size++].data = cur->data;
    }

    _deque_reallocate_map(16, 512, /* first two args dont matter in this test*/
                          &d, 1, 1 /* at front */);
    assert(d.map_size > saved_size); // make sure it grew
    // don't care value of nodes[0], the new slot.
    i = 0;
    for( cur = d.start.node; cur < d.finish.node && i < saved_size ; ++cur ) {
      assert(saved_nodes[i++].data == cur->data);
    } 
    // don't care of value of nodes[saved_size+1], the previous new slot.

    deque_destroy(&d);

    // this time, try with map_size > 2*num_new_nodes
    err = deque_init(16, &d, 0);
    assert(!err);

    // save the pointers.
    assert(d.map_size < 2*_DEQUE_INITIAL_MAP_SIZE);// fits in test buffer
    saved_size = 0;
    for( cur = d.start.node; cur < d.finish.node; ++cur ) {
      saved_nodes[saved_size++].data = cur->data;
    }

    _deque_reallocate_map(16, 512, /* first two args dont matter in this test*/
                          &d, 1, 0 /* not at front */);
    i = 0;
    for( cur = d.start.node; cur < d.finish.node; ++cur ) {
      assert(saved_nodes[i++].data == cur->data);
    }
    assert( i == saved_size );

    deque_destroy(&d);

    err = deque_init(16, &d, 0);
    assert(!err);

    // save the pointers.
    assert(d.map_size < 2*_DEQUE_INITIAL_MAP_SIZE);// fits in test buffer
    saved_size = 0;
    for( cur = d.start.node; cur < d.finish.node; ++cur ) {
      saved_nodes[saved_size++].data = cur->data;
    }

    _deque_reallocate_map(16, 512, /* first two args dont matter in this test*/
                          &d, 1, 1 /* at front */);
    i = 0;
    for( cur = d.start.node; cur < d.finish.node; ++cur ) {
      assert(saved_nodes[i++].data == cur->data);
    }
    assert( i == saved_size );

    deque_destroy(&d);
  }
}
示例#11
0
void test_deque(int lots)
{
  deque_t d;
  // test: space for zeros.
  deque_init(4, &d, 0);
  check_empty(4, &d);
  deque_destroy(&d);

  // test: space for zeros.
  deque_init(4, &d, 10);
  pop_back_check_constant(4, &d, 10, 0);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: space for zeros.
  deque_init(4, &d, 10);
  pop_front_check_constant(4, &d, 10, 0);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push back lots, destroy
  deque_init(4, &d, 0);
  push_back_counting(4, &d, lots);
  iterate_counting(4, &d, lots);
  deque_destroy(&d);
  // test: push back lots, pop front lots.
  deque_init(4, &d, 0);
  push_back_counting(4, &d, lots);
  iterate_counting(4, &d, lots);
  pop_front_check_counting(4, &d, lots);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push back lots, pop back lots.
  deque_init(4, &d, 0);
  push_back_counting(4, &d, lots);
  pop_back_check_counting_reverse(4, &d, lots);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push front lots, pop front lots.
  deque_init(4, &d, 0);
  push_front_counting(4, &d, lots);
  iterate_counting_reverse(4, &d, lots);
  //print_deque(4, &d);
  pop_front_check_counting_reverse(4, &d, lots);
  //print_deque(4, &d);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push front lots, pop back lots.
  deque_init(4, &d, 0);
  push_front_counting(4, &d, lots);
  //print_deque(4, &d);
  pop_back_check_counting(4, &d, lots);
  //print_deque(4, &d);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push both lots, pop back lots, pop back lots.
  deque_init(4, &d, 0);
  push_both_counting(4, &d, lots);
  //print_deque(4, &d);
  pop_back_check_counting_reverse(4, &d, lots);
  pop_back_check_counting(4, &d, lots);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push both lots, pop front lots, pop front lots.
  deque_init(4, &d, 0);
  push_both_counting(4, &d, lots);
  //print_deque(4, &d);
  pop_front_check_counting_reverse(4, &d, lots);
  pop_front_check_counting(4, &d, lots);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push both lots, pop back lots, pop front lots
  deque_init(4, &d, 0);
  push_both_counting(4, &d, lots);
  //print_deque(4, &d);
  pop_back_check_counting_reverse(4, &d, lots);
  pop_front_check_counting_reverse(4, &d, lots);
  check_empty(4, &d);
  deque_destroy(&d);
  // test: push both lots, pop front lots, pop back lots
  deque_init(4, &d, 0);
  push_both_counting(4, &d, lots);
  //print_deque(4, &d);
  pop_front_check_counting_reverse(4, &d, lots);
  pop_back_check_counting_reverse(4, &d, lots);
  check_empty(4, &d);
  deque_destroy(&d);
}
示例#12
0
文件: queue.c 项目: rhennigan/cs102
queue_t * queue_init(void) {
  return deque_init();
}