Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** \file macro.h
- \brief Alcune macro utilizzate sia in dgraph.c che in shortestpath.c
- \author Alessandro Ambrosano
- Si dichiara che il contenuto di questo file è in ogni sua parte
- opera originale dell'autore.
- */
- #ifndef _MACRO_H_
- #define _MACRO_H_
- #include <stdio.h>
- #include <errno.h>
- /** Flag per l'abilitazione del debug */
- static int do_debug = 0;
- /** Controlla una condizione, esegue codice,
- setta errno = EINVAL e ritorna
- \param cond condizione da verificare
- \param extracode codice da eseguire se la condizione si verifica
- \param r valore di ritorno
- */
- #define CHECK_EINVAL_X(cond, extracode, r)\
- if (cond) {\
- extracode\
- errno = EINVAL;\
- return r;\
- }
- /** Controlla una condizione, setta errno = EINVAL e ritorna
- \param cond condizione da verificare
- \param r valore di ritorno
- */
- #define CHECK_EINVAL(cond, r)\
- if (cond) {\
- errno = EINVAL;\
- return r;\
- }
- /** Controlla una condizione, esegue codice,
- setta errno = ENOMEM e ritorna
- \param cond condizione da verificare
- \param extracode codice da eseguire se la condizione si verifica
- \param r valore di ritorno
- */
- #define CHECK_ENOMEM_X(cond, extracode, r)\
- if (cond) {\
- extracode\
- errno = ENOMEM;\
- return r;\
- }
- /** Controlla una condizione, setta errno = ENOMEM e ritorna
- \param cond condizione da verificare
- \param r valore di ritorno
- */
- #define CHECK_ENOMEM(cond, r)\
- if (cond) {\
- errno = ENOMEM;\
- return r;\
- }
- /** Inizio sezione di cleanup */
- #define EC_CLEANUP_BGN\
- ec_cleanup_bgn:\
- {
- /** Fine sezione di cleanup */
- #define EC_CLEANUP_END\
- }
- /** Se var == errrtn stampa un messaggio di debug e salta
- alla sezione di cleanup
- \param var espressione da controllare
- \param errrtn valore di riferimento
- */
- #define ec_cmp(var, errrtn)\
- {\
- if ((var) == (errrtn)) {\
- fprintf(stderr, "%s: %s, riga %d, expr = (%s) errno = %d \n", __func__, __FILE__, __LINE__, #var, errno);\
- perror(__func__);\
- goto ec_cleanup_bgn;\
- }\
- }
- /** Macro per eseguire codice solo in modalità debug */
- #define debug(x)\
- {\
- if (do_debug){\
- x;\
- }\
- }
- /** Se x è -1 stampa un messaggio di debug e salta
- alla sezione di cleanup
- \param x espressione da controllare
- */
- #define ec_meno1(x) {\
- /*fprintf(stderr, "checking -1\n");*/\
- ec_cmp(x, -1)\
- }
- /** Se x è NULL stampa un messaggio di debug e salta
- alla sezione di cleanup
- \param x espressione da controllare
- */
- #define ec_null(x) {\
- /*fprintf(stderr, "checking NULL\n");*/\
- ec_cmp(x, NULL)\
- }
- /** Se x è 0 stampa un messaggio di debug e salta
- alla sezione di cleanup
- \param x espressione da controllare
- */
- #define ec_zero(x) {\
- /*fprintf(stderr, "checking 0\n");*/\
- ec_cmp(x, 0)\
- }
- /** Se x è != 0 stampa un messaggio di debug e salta
- alla sezione di cleanup
- \param x espressione da controllare
- */
- #define ec_nzero(x)\
- {\
- /*fprintf(stderr, "checking nonzero\n");*/\
- if ((x) != 0){\
- ec_cmp(0, 0);\
- }\
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement