• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2022 Google, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  */
23 
24 #ifndef FREEDRENO_COMMON_H_
25 #define FREEDRENO_COMMON_H_
26 
27 
28 /**
29  * Helper macro to get around c++ being cranky about an enum that is a bitmask
30  */
31 #ifdef __cplusplus
32 #define or_mask(d, mask)                                                       \
33    do {                                                                        \
34       decltype(mask) _d = (d);                                                 \
35       d = (decltype(mask))(_d | (mask));                                       \
36    } while (0)
37 #else
38 #define or_mask(d, mask)                                                       \
39    do {                                                                        \
40       d |= (mask);                                                             \
41    } while (0)
42 #endif
43 
44 /*
45  * swap - swap value of @a and @b
46  */
47 #define swap(a, b)                                                             \
48    do {                                                                        \
49       __typeof(a) __tmp = (a);                                                 \
50       (a) = (b);                                                               \
51       (b) = __tmp;                                                             \
52    } while (0)
53 
54 /* for conditionally setting boolean flag(s): */
55 #define COND(bool, val) ((bool) ? (val) : 0)
56 
57 #define BIT(bit) BITFIELD_BIT(bit)
58 
59 #endif /* FREEDRENO_COMMON_H_ */
60