trace.hpp 1.58 KB
Newer Older
Swann Perarnau's avatar
Swann Perarnau committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#ifndef __TRACE_HPP__
#define __TRACE_HPP__
#include <stdarg.h>
#include <stdio.h>


typedef unsigned long long bitmask_t;



#define LOGGING_MASK	1LLU
#define RESOURCE_LOCKER_MASK (1LLU<<1)


#ifdef TRACE_ENABLED
extern bitmask_t   __trace_mask;
void set_mask(bitmask_t& mask, bitmask_t mask_pos, bool activate);
#define ACTIVATE_TRACE_MASK(mask_pos) set_mask(__trace_mask, (mask_pos), true)
#define DEACTIVATE_TRACE_MASK(mask_pos) set_mask(__trace_mask, (mask_pos), false) 
#define HAS_MASK(mask_pos) (__trace_mask&(mask_pos))

#define TRACE(...) do{printf(__VA_ARGS__); fflush(stdout);} while(0)
#define TRACE_IF(cond,...) do{if(cond){TRACE(__VA_ARGS__);}} while(0)
#define TRACE_LOC(...) \
	do{ printf("[%s:%d] ", __FILE__, __LINE__); printf(__VA_ARGS__); fflush(stdout);} while(0)
#define TRACE_LOC_IF(cond,...) do{if((cond)){TRACE_LOC(__VA_ARGS__);}} while(0)
#define TRACE_ON_MASK(mask,...) TRACE_IF((__trace_mask&(mask)), __VA_ARGS__)
#define TRACE_ON_MASK_IF(mask,cond,...) \
	TRACE_IF((__trace_mask&(mask)) && (cond), __VA_ARGS__)
#define TRACE_LOC_ON_MASK(mask,...) \
	TRACE_LOC_IF((__trace_mask&(mask)), __VA_ARGS__)
#define TRACE_LOC_ON_MASK_IF(mask,...) \
	TRACE_LOC_IF((__trace_mask&(mask)) && (cond), __VA_ARGS__)
#else
#define ACTIVATE_TRACE_MASK(mask_pos)
#define DEACTIVATE_TRACE_MASK(mask_pos)
#define HAS_MASK(maskpos)
#define TRACE(...)
#define TRACE_IF(cond,...)
#define TRACE_LOC(...)
#define TRACE_LOC_IF(...)
#define TRACE_ON_MASK(mask,...)
#define TRACE_ON_MASK_IF(mask,cond,...)
#define TRACE_LOC_ON_MASK(mask,...)
#define TRACE_LOC_ON_MASK_IF(mask,...)
#endif

#endif //__TRACE_HPP__