Esempio n. 1
0
char *test_unshift()
{
	char *val = List_unshift(list);
	mu_assert(val == test3, "Wrong value on unshfit");

	val = List_unshift(list);
	mu_assert(val == test1, "Wrong value on unshift");
	mu_assert(List_count(list) == 0, "Wrong count");

	return NULL;
}
Esempio n. 2
0
char *test_unshift() {
  List_unshift(list, test1);
  mu_assert(List_first(list) == test1, "Wrong first value");

  List_unshift(list, test2);
  mu_assert(List_first(list) == test2, "Wrong first value");

  List_unshift(list, test3);
  mu_assert(List_first(list) == test3, "Wrong last value.");
  mu_assert(List_count(list) == 3, "Wrong count on unshift.");

  return NULL;
}
Esempio n. 3
0
List *List_merge(List *list1, List *list2, List_compare cmp)
{
	List *result = List_create(); // 存放排序好的List

	// 数据域
	void *val = NULL;

	// 如果list1的数据小,则push之,并unshift list1
	// 否则,push list2的数据,并unshift list2
	while(List_count(list1) > 0  && List_count(list2) > 0)
	{
		if(cmp((char *)List_first(list1) , (char *)List_first(list2)) >= 0)
		{
			val = List_unshift(list2);
			List_push(result, val);
		}
		else
		{
			val = List_unshift(list1);
			List_push(result, val);
		}
	}

	// push剩余的数据
	if(List_count(list1) > 0)
	{
		while(List_count(list1) > 0)
		{
			val =List_unshift(list1);
			List_push(result, val);
		}
	}
	else
	{
		while(List_count(list2) > 0)
		{
			val =List_unshift(list2);
			List_push(result, val);
		}
	
	}
	List_destroy(list1);
	List_destroy(list2);
	return result;
	
}
char *test_unshift_shift()
{
    List_unshift(list, tv1);
    mu_assert(List_first(list) == tv1, "Bad first value.");

    List_unshift(list, tv2);
    mu_assert(List_first(list) == tv2, "Bad first value.");

    List_unshift(list, tv3);
    mu_assert(List_first(list) == tv3, "Bad first value.");
    mu_assert(List_size(list) == 3, "Wrong size");

    char *out = List_shift(list);
    mu_assert(out == tv3, "Bad shifted value.");

    out = List_shift(list);
    mu_assert(out == tv2, "Bad shifted value.");

    out = List_shift(list);
    mu_assert(out == tv1, "Bad shifted value.");
    mu_assert(List_size(list) == 0, "Wrong size");

    return NULL;
}
Esempio n. 5
0
void
do_write(evutil_socket_t fd, short events, void *arg)
{
    (void) events;

    struct fd_state *state = arg;
    printf("Want to write %d blocks\n", List_count(state->outputs));

    while (List_count(state->outputs) > 0) {
        RtmpOutputMessage *this_output = List_first(state->outputs);

        printf("Block write: %u\n", this_output->data_left);

        while (this_output->data_left > 0) {
            ssize_t result = send(fd, 
                                rtmp_output_message_start_at(this_output), 
                                this_output->data_left, 
                                0);
            
            if (result < 0) {
                if (errno == EAGAIN) // XXX use evutil macro
                    return;
                free_fd_state(state);
                return;
            }
            assert(result != 0);

            this_output->data_left -= result;
            printf("\tWritten: %d\n", result);

            if (this_output->data_left == 0) {
                List_unshift(state->outputs);
                rtmp_destroy_output_message(this_output);
                break;
            }
        }
    }

    event_del(state->write_event);
}