00001 #pragma once
00002 #ifndef ASSUME_H
00003 #define ASSUME_H
00004
00005 #include <stdio.h>
00006 #include <stdlib.h>
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #define __LB(l, ...) l
00030 #define __RB(l, ...) __VA_ARGS__
00031
00032 #define __assume(expr, exprstr, ...) \
00033 do { \
00034 if (!(expr)) { \
00035 fprintf (stderr, "%s:%d (%s): Assumption `%s' not fulfilled!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, exprstr); \
00036 do { __LB(__VA_ARGS__) } while(abort(),0); \
00037 } else { \
00038 do { __RB(__VA_ARGS__) } while(0); \
00039 } \
00040 } while (0)
00041
00042 #if defined(__GNUC__)
00043 # define assume(expr, ...) __assume(__builtin_expect(expr, 1), #expr, __VA_ARGS__)
00044 #else
00045 # define assume(expr, ...) __assume(expr, #expr, __VA_ARGS__)
00046 #endif
00047
00048 #endif