コード例 #1
0
ファイル: slist.c プロジェクト: Yixf-Self/exonerate
SList *SList_merge(SList *left, SList *right,
                   SList_CompareFunc compare_func, gpointer user_data){
    register SList *merged = SList_create(left->set);
    register SList swap;
    g_assert(left->set == right->set);
    while(!(SList_isempty(left) || SList_isempty(right))){
        if(compare_func(left->head->next->data,
                        right->head->next->data, user_data)){
            SList_queue(merged, SList_pop(left));
        } else {
            SList_queue(merged, SList_pop(right));
            }
        }
    SList_join(merged, left);
    SList_join(merged, right);
    SList_destroy(left);
    /* Swap left and merged */
    swap.head = left->head;
    swap.tail = left->tail;
    left->head = merged->head;
    left->tail = merged->tail;
    merged->head = swap.head;
    merged->tail = swap.tail;
    return merged;
    }
コード例 #2
0
ファイル: slist.c プロジェクト: Yixf-Self/exonerate
void SList_empty_with_data(SList *slist,
                           SList_DestroyFunc destroy_func,
                           gpointer user_data){
    register gpointer *data;
    g_assert(slist);
    g_assert(destroy_func);
    while(!SList_isempty(slist)){
        data = SList_pop(slist);
        destroy_func(data, user_data);
        }
    return;
    }
コード例 #3
0
ファイル: slist.c プロジェクト: Yixf-Self/exonerate
void SList_remove(SList *slist, SListNode *prev_node){
    register SListNode *sln;
    g_assert(slist);
    if(!prev_node){
        SList_pop(slist);
        return;
        }
    if(prev_node->next){
        sln = prev_node->next;
        prev_node->next = prev_node->next->next;
        SListNode_free(slist->set, sln);
        }
    return;
    }
コード例 #4
0
ファイル: s_list_test.c プロジェクト: kujirahand/sakuramml-c
void s_list_test() {
  SList *list;
  char *p, *c;
  int i;
  //
  // --- push & pop ---
  //
  list = SList_new();
  SList_push(list, "cde");
  SList_push(list, "efg");
  SList_push(list, "gab");
  //
  p = SList_pop(list);
  s_test_str_eq(p, "gab", "SList_push/pop");
  p = SList_pop(list);
  s_test_str_eq(p, "efg", "SList_push/pop");
  //
  SList_free(list);
  //
  // --- grow test ---
  // 
  // size grow test
  list = SList_new();
  for (i = 0; i < 1024; i++) {
    SList_push(list, "aaa");
  }
  SList_sort(list, s_list_test_sort);
  s_test_eq(list->len, 1024, "SList->len:1");
  SList_free(list);
  //
  // --- sort test ---
  //
  list = SList_new();
  SList_push(list, "bat");
  SList_push(list, "cocoa");
  SList_push(list, "errors");
  SList_push(list, "a");
  SList_push(list, "is");
  // sort
  SList_sort(list, s_list_test_sort_len);
  c = SList_get(list, 0);
  s_test_str_eq(c, "a", "SList_sort1");
  c = SList_get(list, 1);
  s_test_str_eq(c, "is", "SList_sort2");
  c = SList_get(list, 2);
  s_test_str_eq(c, "bat", "SList_sort3");
  c = SList_get(list, 3);
  s_test_str_eq(c, "cocoa", "SList_sort4");
  c = SList_get(list, 4);
  s_test_str_eq(c, "errors", "SList_sort5");
  // msort
  SList_msort(list, s_list_test_sort_len);
  c = SList_get(list, 0);
  s_test_str_eq(c, "a", "SList_msort1");
  c = SList_get(list, 1);
  s_test_str_eq(c, "is", "SList_msort2");
  c = SList_get(list, 2);
  s_test_str_eq(c, "bat", "SList_msort3");
  c = SList_get(list, 3);
  s_test_str_eq(c, "cocoa", "SList_msort4");
  c = SList_get(list, 4);
  s_test_str_eq(c, "errors", "SList_msort5");
  //
  SList_free(list);
  //
  //s_test_eq(list->len, 87, "SList->len:2");
  // s_test_str_eq((char*)SList_peekLast(list), "zzz", "SList_sort");
  //
}
コード例 #5
0
ファイル: slist.c プロジェクト: Yixf-Self/exonerate
void SList_empty(SList *slist){
    g_assert(slist);
    while(!SList_isempty(slist))
        SList_pop(slist);
    return;
    }