Beispiel #1
0
void* slist_find(slist* list,
                 int* index,
                 void* comp_dat,
                 char(*comp_fn)(void*,void*))
{
  int i=1;
  slist_elem* sle=0;

  if(!list||list->_size<1||!comp_dat||!comp_fn)
    return 0;
  sle=list->_head;
  for(;sle;sle=sle->_next,++i)
    if(comp_fn(sle->_data,comp_dat)==1)
    {
      if(index)*index=i;
      return sle->_data;
    }
  return 0;
}
Beispiel #2
0
/* this implements a generic bubble sort */
void Vector_sort(Vector* vector, int (*comp_fn)(void*, void*)) {
  int i = 0;
  int j = 0;
  void* temp = malloc(vector->elem_size);

  if (vector) {
    for (i = 0; i < vector->size; i++) {
      for (j = 1; j < vector->size; j++) {
        /* a = j-1, b = j */
        if (comp_fn((char*)vector->base + vector->elem_size * (j-1),
              (char*)vector->base + vector->elem_size * j) == 1) { /* if a > b */
          /* temp = a */
          memcpy(temp, (char*)vector->base + vector->elem_size * (j-1), vector->elem_size);
          /* a = b */
          memcpy((char*)vector->base + vector->elem_size * (j-1), (char*)vector->base + vector->elem_size * j,  vector->elem_size);
          /* b = temp */
          memcpy((char*)vector->base + vector->elem_size * j, temp, vector->elem_size);
        }
      }
    }
    free(temp);
  }
}