Beispiel #1
0
/* Hook VTABLE into our global LOADERS list according to its own
   PRIORITY field value.  */
int
lt_dlloader_add (const lt_dlvtable *vtable)
{
  SList *item;

  if ((vtable == 0)	/* diagnose invalid vtable fields */
      || (vtable->module_open == 0)
      || (vtable->module_close == 0)
      || (vtable->find_sym == 0)
      || ((vtable->priority != LT_DLLOADER_PREPEND) &&
	  (vtable->priority != LT_DLLOADER_APPEND)))
    {
      LT__SETERROR (INVALID_LOADER);
      return RETURN_FAILURE;
    }

  item = slist_box (vtable);
  if (!item)
    {
      (*lt__alloc_die) ();

      /* Let the caller know something went wrong if lt__alloc_die
	 doesn't abort.  */
      return RETURN_FAILURE;
    }

  if (vtable->priority == LT_DLLOADER_PREPEND)
    {
      loaders = slist_cons (item, loaders);
    }
  else
    {
      assert (vtable->priority == LT_DLLOADER_APPEND);
      loaders = slist_concat (loaders, item);
    }

  return RETURN_SUCCESS;
}
Beispiel #2
0
int main(int argc, char *argv[])
{
	SList *l1=NULL, *l2=NULL, *l3=NULL;
	int i;

	l1 = slist_prepend(l1, 96);
	l1 = slist_prepend(l1, 39);
	l1 = slist_prepend(l1, 28);
	l1 = slist_prepend(l1, 65);
	l1 = slist_prepend(l1, 61);
	l1 = slist_prepend(l1, 00);
	l1 = slist_prepend(l1, 34);
	l1 = slist_prepend(l1, 21);
	l1 = slist_prepend(l1, 43);
	l1 = slist_prepend(l1, 48);

	l2 = slist_prepend(l2, 71);
	l2 = slist_prepend(l2, 00);
	l2 = slist_prepend(l2, 02);
	l2 = slist_prepend(l2, 62);
	l2 = slist_prepend(l2, 22);
	l2 = slist_prepend(l2, 14);
	l2 = slist_prepend(l2, 59);
	l2 = slist_prepend(l2, 28);
	l2 = slist_prepend(l2, 71);
	l2 = slist_prepend(l2, 21);
	l2 = slist_prepend(l2, 89);
	l2 = slist_prepend(l2, 94);

	l3 = slist_prepend(l3, 11);
	l3 = slist_prepend(l3, 81);
	l3 = slist_prepend(l3, 99);
	l3 = slist_prepend(l3, 47);
	l3 = slist_prepend(l3, 72);
	l3 = slist_prepend(l3, 79);
	l3 = slist_prepend(l3, 30);
	l3 = slist_prepend(l3, 66);
	l3 = slist_prepend(l3, 96);
	
	
	printf("len(l1) = %i\n", slist_length(l1));
	printf("len(l2) = %i\n", slist_length(l2));
	printf("len(l3) = %i\n", slist_length(l3));
	puts("");

	printf("l1 = "); printlist(l1);
	printf("l2 = "); printlist(l2);
	printf("l3 = "); printlist(l3);
	puts("");

	/* NOTA:
	    Si tu función concat modifica las listas pasadas (es decir, hace
	   que el último nodo de la primera apunte al primero de la segunda),
	   vas a obtener resultados distintos ya que l1 se estaría modificando.
	    Cambiar el argumento 'l1' por 'clonar(l1)' para que no se
	   modifique la lista. */
	printf("l1 ++ l2 = "); printlist(slist_concat(l1, l2));
	printf("l1 ++ [] = "); printlist(slist_concat(l1, NULL));
	printf("[] ++ l2 = "); printlist(slist_concat(NULL, l2));
	puts("");

	/* Si tu intersect cambia las listas, hacer lo mismo explicado para
	   concat.. */
	printf("l1 <inter> l2 = "); printlist(slist_intersect(l1, l2));
	printf("l1 <inter> l3 = "); printlist(slist_intersect(l1, l3));
	puts("");
	
//	slist_sort(l1,icmpM);
	printf("sort(l1) = "); printlist(slist_sort(l1,icmpM));
	puts("");

	/* NOTA:
	    Si tu lista quedó ordenada al revés, o no queda ordenada puede ser
	   por confusiones en como opera la función de comparación. Lo que debe
	   cumplir la función de comparación es:
	   		icmp(a, b) >  0   si y solo si    a > b
			icmp(a, b) == 0   si y solo si    a == b
			icmp(a, b) <  0   si y solo si    a < b

	   Los valores no son necesariamente 1 y -1. */
	   		
    return 0;
}