]> granicus.if.org Git - zziplib/blob - zzip/__hints.h
indentation
[zziplib] / zzip / __hints.h
1 #ifndef __ZZIP_INTERNAL_HINTS_H
2 #define __ZZIP_INTERNAL_HINTS_H
3 #include <zzip/conf.h>
4
5 #ifndef ZZIP_GNUC_ATLEAST
6 # if defined __GNUC__ && defined __GNUC_MINOR__
7 # define ZZIP_GNUC_ATLEAST(_M_,_N_) \
8         ((__GNUC__ << 10) + __GNUC_MINOR__ >= ((_M_) << 10) + (_N_))
9 # elif defined __GNUC__
10 # define ZZIP_GNUC_ATLEAST(_M_,_N_) \
11         ((__GNUC__ << 10) >= ((_M_) << 10))
12 # else
13 # define ZZIP_GNUC_ATLEAST(_M_, _N_) 0
14 # endif
15 #endif
16
17 #ifndef ZZIP_GNUC_EXTENSION
18 # if ZZIP_GNUC_ATLEAST(2,8)
19 # define ZZIP_GNUC_EXTENSION __extension__
20 # else
21 # define ZZIP_GNUC_EXTENSION 
22 # endif
23 #endif
24
25 /* func has no side effects, return value depends only on params and globals */
26 #ifndef ZZIP_GNUC_PURE
27 # if ZZIP_GNUC_ATLEAST(2,8)
28 # define ZZIP_GNUC_PURE __attribute__((__pure__))
29 # else
30 # define ZZIP_GNUC_PURE
31 # endif
32 #endif
33
34 /* func has no side effects, return value depends only on params */
35 #ifndef ZZIP_GNUC_CONST
36 # if ZZIP_GNUC_ATLEAST(2,4)
37 # define ZZIP_GNUC_CONST __attribute__((__const__))
38 # else
39 # define ZZIP_GNUC_CONST
40 # endif
41 #endif
42
43 /* typename / variable / function possibly unused */
44 #ifndef ZZIP_GNUC_UNUSED
45 # if ZZIP_GNUC_ATLEAST(2,4)
46 # define ZZIP_GNUC_UNUSED __attribute__((__unused__))
47 # else
48 # define ZZIP_GNUC_UNUSED
49 # endif
50 #endif
51
52 /* obvious. btw, a noreturn-func should return void */
53 #ifndef ZZIP_GNUC_NORETURN
54 # if ZZIP_GNUC_ATLEAST(2,5)
55 # define ZZIP_GNUC_NORETURN __attribute__((__noreturn__))
56 # else
57 # define ZZIP_GNUC_NORETURN
58 # endif
59 #endif
60
61 /* omit function from profiling with -finstrument-functions */
62 #ifndef ZZIP_GNUC_NO_INSTRUMENT
63 # if ZZIP_GNUC_ATLEAST(2,4)
64 # define ZZIP_GNUC_NO_INSTRUMENT __attribute__((__no_instrument_function__))
65 # else
66 # define ZZIP_GNUC_NO_INSTRUMENT
67 # endif
68 #endif
69
70 /* all pointer args must not be null, and allow optimiztons based on the fact*/
71 #ifndef ZZIP_GNUC_NONNULL
72 # if ZZIP_GNUC_ATLEAST(3,1)
73 # define ZZIP_GNUC_NONNULL __attribute__((nonnull))
74 # else
75 # define ZZIP_GNUC_NONNULL
76 # endif
77 #endif
78
79 /* the function can not throw - the libc function are usually nothrow */
80 #ifndef ZZIP_GNUC_NOTHROW
81 # if ZZIP_GNUC_ATLEAST(3,2)
82 # define ZZIP_GNUC_NOTHROW __attribute__((nothrow))
83 # else
84 # define ZZIP_GNUC_NOTHROW
85 # endif
86 #endif
87
88 /* typename / function / variable is obsolete but still listed in headers */
89 #ifndef ZZIP_GNUC_DEPRECATED
90 # if ZZIP_GNUC_ATLEAST(3,1)
91 # define ZZIP_GNUC_DEPRECATED __attribute__((deprecated))
92 # else
93 # define ZZIP_GNUC_DEPRECATED
94 # endif
95 #endif
96
97 /* resolve references to this function during pre-linking the libary */
98 #ifndef ZZIP_GNUC_LIB_PROTECTED
99 # if ZZIP_GNUC_ATLEAST(3,1)
100 # define ZZIP_GNUC_LIB_PROTECTED __attribute__((visiblity("protected")))
101 # else
102 # define ZZIP_GNUC_LIB_PROTECTED
103 # endif
104 #endif
105
106 /* func shall only be usable within the same lib (so, no entry in lib symtab)*/
107 #ifndef ZZIP_GNUC_LIB_PRIVATE
108 # if ZZIP_GNUC_ATLEAST(3,1)
109 # define ZZIP_GNUC_LIB_PRIVATE __attribute__((visiblity("hidden")))
110 # else
111 # define ZZIP_GNUC_LIB_PRIVATE
112 # endif
113 #endif
114
115 /* ... and not even passed as a function pointer reference to outside the lib*/
116 #ifndef ZZIP_GNUC_LIB_INTERNAL
117 # if ZZIP_GNUC_ATLEAST(3,1)
118 # define ZZIP_GNUC_LIB_INTERNAL __attribute__((visiblity("internal")))
119 # else
120 # define ZZIP_GNUC_LIB_INTERNAL
121 # endif
122 #endif
123
124
125 #ifndef ZZIP_GNUC_FORMAT
126 # if ZZIP_GNUC_ATLEAST(2,4)
127 # define ZZIP_GNUC_FORMAT(_X_) __attribute__((__format_arg__(_X_)))
128 # else
129 # define ZZIP_GNUC_FORMAT(_X_)
130 # endif
131 #endif
132
133 #ifndef ZZIP_GNUC_SCANF
134 # if ZZIP_GNUC_ATLEAST(2,4)
135 # define ZZIP_GNUC_SCANF(_S_,_X_) __attribute__((__scanf__(_S_,_X_)))
136 # else
137 # define ZZIP_GNUC_SCANF(_S_,_X_)
138 # endif
139 #endif
140
141 #ifndef ZZIP_GNUC_PRINTF
142 # if ZZIP_GNUC_ATLEAST(2,4)
143 # define ZZIP_GNUC_PRINTF(_S_,_X_) __attribute__((__printf__(_S_,_X_)))
144 # else
145 # define ZZIP_GNUC_PRINTF(_S_,_X_)
146 # endif
147 #endif
148
149 #ifndef ZZIP_FUNCTION
150 # if ZZIP_GNUC_ATLEAST(2,6)
151 # define ZZIP_FUNC             __FUNCTION__
152 # define ZZIP_FUNCTION         __FUNCTION__
153 # elif  defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
154 # define ZZIP_FUNC             __func__
155 # define ZZIP_FUNCTION         ""
156 # else   
157 # define ZZIP_FUNC             0
158 # define ZZIP_FUNCTION         ""
159 # endif  
160 #endif
161
162 #ifndef ZZIP_STRING
163 #define ZZIP_STRING(_X_)   ZZIP_STRING_(_X_)
164 #define ZZIP_STRING_(_Y_)  #_Y_
165 #endif
166
167 #ifndef ZZIP_DIM
168 #define ZZIP_DIM(_A_)  (sizeof(_A_) / sizeof ((_A_)[0]))
169 #endif
170
171 #if !(defined ZZIP_FOR1 && defined ZZIP_END1)
172 # if defined sun || defined __sun__
173 # define ZZIP_FOR1  if (1)
174 # define ZZIP_END1  else (void)0
175 # else
176 # define ZZIP_FOR1  do
177 # define ZZIP_END1  while (0)
178 # endif
179 #endif
180
181 #ifndef ZZIP_BRANCH_OVER
182 # if ZZIP_GNUC_ATLEAST(2,96)
183 # define ZZIP_BRANCH_OVER(_X_) __builtin_expect((_X_),0)
184 # else
185 # define ZZIP_BRANCH_OVER(_X_) (_X_)
186 # endif
187 #endif
188
189 #endif