various improvements
[smdp.git] / include / bitops.h
1 #if !defined( BITOPS_H )
2 #define BITOPS_H
3
4 /*
5  * Macros to do bit operations on integer variables.
6  * Copyright (C) 2014 Michael Goehler
7  *
8  * This file is part of mdp.
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  *
23  *
24  * macro: SET_BIT to set bit at pos of var to 1
25  * macro: CLEAR_BIT to set bit at pos of var to 0
26  * macro: TOGGLE_BIT to toggle bit at pos of var from 1 to 0 and vice versa
27  * macro: CHECK_BIT returns > 0 if bit at pos of var is set to 1
28  *
29  * Example:
30  *      int i = 0;
31  *      i = SET_BIT(i, 2);
32  *      if(CHECK_BIT(i, 2))
33  *          printf("bit 2 is set\n");
34  *      printf("value of i is %d\n", i);
35  *
36  */
37
38 #define SET_BIT(var, pos)    ((var) |= (1<<(pos)))
39 #define CLEAR_BIT(var, pos)  ((var) &= (~(1<<(pos))))
40 #define TOGGLE_BIT(var, pos) ((var) ^= (1<<(pos)))
41 #define CHECK_BIT(var, pos)  ((var) &  (1<<(pos)))
42
43 #endif // !defined( BITOPS_H )