Program Listing for File macros.h

Return to documentation for file (c/fmdt/macros.h)

#pragma once

#include <stdint.h>
#include <sys/time.h>

// FMDT_ENABLE_DEBUG : macro definissant le fonctionnement general des macros de debug

#ifdef FMDT_ENABLE_DEBUG

// macro de debug
#ifndef VERBOSE
#define VERBOSE(X) X
#endif
#define PUTS(str) fprintf(stderr, "(DBG) %s\n", str)
#define CR putchar('\n');
#define SHOWNAME(X) #X

#define IDISP(x) fprintf(stderr, "(DBG) %s = %3d\n", #x, x)
#define FDISP(x) fprintf(stderr, "(DBG) %s = %3f\n", #x, x)
#define DISP(x) fprintf(stderr, "(DBG) %s = %s\n", #x, x)

#else

#ifndef VERBOSE
#define VERBOSE(X)
#endif
#define PUTS(str)
#define CR putchar('\n');
#define SHOWNAME(X) #X // pas d'appel en mode release

#define DISP(x)
#define FDISP(x)
#define IDISP(x)

#endif // FMDT_ENABLE_DEBUG

#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) < (b)) ? (b) : (a))
#endif
#define CLAMP(x, a, b) MIN(MAX(x, a), b)

#define TIME_POINT(name) struct timeval t_##name; \
                         gettimeofday(&t_##name, NULL); \
                         const double t_##name##_us = (double)(t_##name.tv_sec * 1e6 + t_##name.tv_usec);
#define TIME_ELAPSED_US(name1, name2) (t_##name2##_us - t_##name1##_us)
#define TIME_ELAPSED_MS(name1, name2) (t_##name2##_us - t_##name1##_us) * 1e-3
#define TIME_ELAPSED_S(name1, name2) (t_##name2##_us - t_##name1##_us) * 1e-6
#define TIME_ELAPSED_SEC(name1, name2) TIME_ELAPSED_S(name1, name2)