Garmin Fleet Management Controller  2.19.0
util_macros.h
Go to the documentation of this file.
1 /*********************************************************************
2 *
3 * HEADER NAME:
4 * util_macros.h
5 *
6 * Copyright 2008-2009 by Garmin Ltd. or its subsidiaries.
7 *---------------------------------------------------------------------
8 * $NoKeywords$
9 *********************************************************************/
10 #ifndef UTIL_MACROS_H
11 #define UTIL_MACROS_H
12 
13 //----------------------------------------------------------------------
16 //----------------------------------------------------------------------
17 
18 //----------------------------------------------------------------------
23 //----------------------------------------------------------------------
24 #define setbits( _b, _len ) ( ( ( 1U << ( (_len) - 1 ) ) - 1U + ( 1U << ( (_len) - 1 ) ) ) << (_b) )
25 
26 //----------------------------------------------------------------------
29 //----------------------------------------------------------------------
30 #define setbit( _b ) ( (unsigned)1 << (_b) )
31 
32 //----------------------------------------------------------------------
37 //----------------------------------------------------------------------
38 #define clrbits( _b, _len) ( ~setbits( (_b), (_len) ) )
39 
40 //----------------------------------------------------------------------
44 //----------------------------------------------------------------------
45 #define clrbit( _b ) ( ~setbit( _b ) )
46 
47 //----------------------------------------------------------------------
51 //----------------------------------------------------------------------
52 #define allbitset( _val, _mask ) ( ( (_val) & (_mask) ) == (_mask) )
53 
54 //----------------------------------------------------------------------
58 //----------------------------------------------------------------------
59 #define anybitset( _val, _mask ) ( ( (_val) & (_mask) ) != 0 )
60 
61 //----------------------------------------------------------------------
64 //----------------------------------------------------------------------
65 #define max_sint_val( _t ) ( setbits( 0, ( sizeof( _t ) * 8 ) - 1 ) )
66 
67 //----------------------------------------------------------------------
70 //----------------------------------------------------------------------
71 #define min_sint_val( _t ) ( ~max_sint_val( _t ) )
72 
73 //----------------------------------------------------------------------
76 //----------------------------------------------------------------------
77 #define max_uint_val( _t ) ( setbits( 0, ( sizeof( _t ) * 8 ) ) )
78 
79 //----------------------------------------------------------------------
83 //----------------------------------------------------------------------
84 #define offset_of( _s, _m ) ( (unsigned char *)&( ( (_s *)0 )->_m ) - (unsigned char *)0 )
85 
86 //----------------------------------------------------------------------
89 //----------------------------------------------------------------------
90 #define cnt_of_array( _a ) ( sizeof( (_a) ) / sizeof( (_a)[0] ) )
91 
92 //----------------------------------------------------------------------
94 //----------------------------------------------------------------------
95 #define minval( _x, _y ) ( (_x) < (_y) ? (_x) : (_y) )
96 
97 //----------------------------------------------------------------------
99 //----------------------------------------------------------------------
100 #define maxval( _x, _y ) ( (_x) > (_y) ? (_x) : (_y) )
101 
102 //----------------------------------------------------------------------
105 //----------------------------------------------------------------------
106 #define returnif( _check ) \
107  { \
108  if( _check ) \
109  { \
110  return; \
111  } \
112  } /* returnif */
113 
114 //----------------------------------------------------------------------
118 //----------------------------------------------------------------------
119 #define returnif_v( _check, _value ) \
120  { \
121  if( _check ) \
122  { \
123  return( _value ); \
124  } \
125  } /* returnif */
126 
127 //----------------------------------------------------------------------
133 //----------------------------------------------------------------------
134 #define _tokcat( _x, _y ) _x ## _y
135 
136 //----------------------------------------------------------------------
145 //----------------------------------------------------------------------
146 #define tokcat( _x, _y ) _tokcat( _x, _y )
147 
148 //----------------------------------------------------------------------
154 //----------------------------------------------------------------------
155 #define _compiler_assert( _e, _m ) \
156  struct tokcat( __, tokcat( _m, __LINE__ ) ) { int _ : ( (_e) ? 1 : 0 ); }
157 
158 //----------------------------------------------------------------------
163 //----------------------------------------------------------------------
164 #define compiler_assert( _e ) _compiler_assert( _e, _UTIL_H_ )
165 
166 #endif