list_test.c 2.37 KB
#include <stdio.h>

#include <scot/exception.h>
#include <scot_common.h>
#define  GEN_LOCAL
#include <scot/list.h>
#undef   GEN_LOCAL

GEN_LIST (int);


   int
main (void)
{
   list_int_node_t   *i_list,
                     *i_node,
                     *i_node_next;
   int               a1 = 5,
                     a2 = 2,
                     a3 = 8,
                     a4 = 12,
                     a5 = 3,
                     *val;
   excenv_t          *ee;

   char              *locale;

   locale = setlocale (LC_ALL, "");

   TRY
   {
      i_list = list_int_new (i_list);
      i_node = i_list;

      i_node = list_int_insert (i_node, &a1);
      i_node = list_int_insert (i_node, &a2);
      i_node = list_int_insert (i_node, &a3);
      i_node = list_int_insert (i_node, &a4);
      //list_int_insert (NULL, &a5);

      i_node = i_list;
      while (! list_int_eol (i_list, i_node))
      {
         i_node      = list_int_next (i_node);
         printf ("Wert: %d\n", * list_int_retrive (i_node));
      }

      if (list_int_find (i_list, &a5) != NULL)
         printf("JO, Wert %d gefunden\n", a5);
      if (list_int_find (i_list, &a3) != NULL)
         printf("JO, Wert %d gefunden\n", a3);

      list_int_free (i_list);
   }
   CATCH (ee)
   {
      exception_t *e;

      while (e = retrive_exception (ee))
      {
         if (EXC_IN_THIS_TRY (e))
         {
            switch (exc_errnum_get (e))
            {
               /* i need to find more reasonable errors for list
                * one must see if the creatin of a new list, or the creation
                * of an node or the freeing of something or something else
                * got wrong (for now i do the free in any case of an error,
                * but this works only because i know that the list is
                * already created.) */
               case  LIST_FREE_ERR:
                  fprintf (stderr, "list list remains unfreed.");
               case  LIST_FIND_ERR:
               case  LIST_RETR_ERR:
               case  LIST_NEXT_ERR:
               case  LIST_EOL_ERR:
               case  LIST_INSERT_ERR:
                  list_int_free (i_list);
                  break;
               case  LIST_NEW_ERR:
                  fprintf (stderr, "UHH, OHH i got no list, i must die.");
            }
         }

         print_exception (e);
      }

      free_catched (ee);
   }

   exc_end ();

   return 0;
}