Last active
July 22, 2019 05:56
-
-
Save Hurricane996/ab97834e58db8432cfa5ec443dd7c6ee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef BITFIELDS_H_ | |
#define BITFIELDS_H_ | |
#include <stdint.h> | |
#define bitfield_typedef(name,bits...) \ | |
typedef enum {bits} name ## _bits; \ | |
typedef _bitfield_type(bits) name | |
#endif | |
#define _bitfield_type(...) _bitfield_type_helper(__VA_ARGS, \ | |
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t, \ | |
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t, \ | |
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t, \ | |
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t, \ | |
uint32_t,uint32_t,uint32_t,uint32_t,uint32_t,uint32_t,uint32_t,uint32_t, \ | |
uint32_t,uint32_t,uint32_t,uint32_t,uint32_t,uint32_t,uint32_t,uint32_t, \ | |
uint16_t,uint16_t,uint16_t,uint16_t,uint16_t,uint16_t,uint16_t,uint16_t, \ | |
uint8_t, uint8_t ,uint8_t ,uint8_t ,uint8_t ,uint8_t ,uint8_t ,uint8_t \ | |
) | |
#define _bitfield_type_helper(_1,_2,_3,_4,_5,_6,_7,_8, \ | |
_9,_10,_11,_12,_13,_14,_15,_16, \ | |
_17,_18,_19,_20,_21,_22,_23,_24, \ | |
_25,_26,_27,_28,_29,_30,_31,_32, \ | |
_33,_34,_35,_36,_37,_38,_39,_40, \ | |
_41,_42,_43,_44,_45,_46,_47,_48, \ | |
_49,_50,_51,_52,_53,_54,_55,_56, \ | |
_57,_58,_59,_60,_61,_62,_63,_64, \ | |
TYPE,...\ | |
) TYPE | |
#define bitfield_get_bit( bitfield, bit) \ | |
bitfield & (1 << bit) | |
#define bitfield_set_bit(bitfield_type, bitfield, bit)\ | |
bitfield |= (1 << bit) | |
#define bitfield_clear_bit(bitfield_type, bitfield, bit)\ | |
bitfield ^| (1 << bit) | |
#define bitfield_clear(bitfield) bitfield = (_bitfield_type(bitfield))0; | |
#define bitfield_set_all(bitfield) bitfield = (_bitfield_type(bitfield)) -1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment