Advertisement
wandrake

Untitled

Jul 13th, 2011
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.24 KB | None | 0 0
  1. /** \file macro.h
  2.     \brief Alcune macro utilizzate sia in dgraph.c che in shortestpath.c
  3.     \author Alessandro Ambrosano
  4.     Si dichiara che il contenuto di questo file è in ogni sua parte
  5.     opera originale dell'autore.
  6. */
  7. #ifndef _MACRO_H_
  8. #define _MACRO_H_
  9.  
  10. #include <stdio.h>
  11. #include <errno.h>
  12.  
  13. /** Flag per l'abilitazione del debug */
  14. static int do_debug = 0;
  15.  
  16. /** Controlla una condizione, esegue codice,
  17.     setta errno = EINVAL e ritorna
  18.  
  19.     \param cond condizione da verificare
  20.     \param extracode codice da eseguire se la condizione si verifica
  21.     \param r valore di ritorno
  22. */
  23. #define CHECK_EINVAL_X(cond, extracode, r)\
  24.     if (cond) {\
  25.         extracode\
  26.         errno = EINVAL;\
  27.         return r;\
  28.     }
  29.  
  30. /** Controlla una condizione, setta errno = EINVAL e ritorna
  31.  
  32.     \param cond condizione da verificare
  33.     \param r valore di ritorno
  34. */
  35. #define CHECK_EINVAL(cond, r)\
  36.     if (cond) {\
  37.         errno = EINVAL;\
  38.         return r;\
  39.     }
  40.  
  41. /** Controlla una condizione, esegue codice,
  42.     setta errno = ENOMEM e ritorna
  43.  
  44.     \param cond condizione da verificare
  45.     \param extracode codice da eseguire se la condizione si verifica
  46.     \param r valore di ritorno
  47. */
  48. #define CHECK_ENOMEM_X(cond, extracode, r)\
  49.     if (cond) {\
  50.         extracode\
  51.         errno = ENOMEM;\
  52.         return r;\
  53.     }
  54.  
  55. /** Controlla una condizione, setta errno = ENOMEM e ritorna
  56.  
  57.     \param cond condizione da verificare
  58.     \param r valore di ritorno
  59. */
  60. #define CHECK_ENOMEM(cond, r)\
  61.     if (cond) {\
  62.         errno = ENOMEM;\
  63.         return r;\
  64.     }
  65.  
  66. /** Inizio sezione di cleanup */
  67. #define EC_CLEANUP_BGN\
  68.     ec_cleanup_bgn:\
  69.     {
  70.  
  71. /** Fine sezione di cleanup */
  72. #define EC_CLEANUP_END\
  73.     }
  74.  
  75. /** Se var == errrtn stampa un messaggio di debug e salta
  76.     alla sezione di cleanup
  77.  
  78.     \param var espressione da controllare
  79.     \param errrtn valore di riferimento
  80. */
  81. #define ec_cmp(var, errrtn)\
  82.     {\
  83.         if ((var) == (errrtn)) {\
  84.             fprintf(stderr, "%s: %s, riga %d, expr = (%s) errno = %d \n", __func__, __FILE__, __LINE__, #var, errno);\
  85.             perror(__func__);\
  86.             goto ec_cleanup_bgn;\
  87.         }\
  88.     }
  89.  
  90. /** Macro per eseguire codice solo in modalità debug */
  91. #define debug(x)\
  92. {\
  93.     if (do_debug){\
  94.     x;\
  95.     }\
  96. }
  97.  
  98. /** Se x è -1 stampa un messaggio di debug e salta
  99.     alla sezione di cleanup
  100.  
  101.     \param x espressione da controllare
  102. */
  103. #define ec_meno1(x) {\
  104.     /*fprintf(stderr, "checking -1\n");*/\
  105.     ec_cmp(x, -1)\
  106. }
  107.  
  108. /** Se x è NULL stampa un messaggio di debug e salta
  109.     alla sezione di cleanup
  110.  
  111.     \param x espressione da controllare
  112. */
  113. #define ec_null(x) {\
  114.     /*fprintf(stderr, "checking NULL\n");*/\
  115.     ec_cmp(x, NULL)\
  116. }
  117.  
  118. /** Se x è 0 stampa un messaggio di debug e salta
  119.     alla sezione di cleanup
  120.  
  121.     \param x espressione da controllare
  122. */
  123. #define ec_zero(x) {\
  124.     /*fprintf(stderr, "checking 0\n");*/\
  125.     ec_cmp(x, 0)\
  126. }
  127.  
  128. /** Se x è != 0 stampa un messaggio di debug e salta
  129.     alla sezione di cleanup
  130.  
  131.     \param x espressione da controllare
  132. */
  133. #define ec_nzero(x)\
  134.     {\
  135.         /*fprintf(stderr, "checking nonzero\n");*/\
  136.         if ((x) != 0){\
  137.             ec_cmp(0, 0);\
  138.         }\
  139.     }
  140.  
  141. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement