8#ifndef _BITFIELD_DEFS_H_
9#define _BITFIELD_DEFS_H_
16template <
typename T,
int Offset,
int Bits>
21 static const T maskl = (T(1) << Bits) - T(1);
24 inline operator T()
const {
25 return (value >> Offset) & maskl;
29template <
typename T,
int Offset,
int Bits>
34 static const T maskl = (T(1) << Bits) - T(1);
35 static const T masks = maskl << Offset;
39 inline void operator = (T v) {
40 value = (value & ~masks) | ((v & maskl) << Offset);
43 inline void operator |= (T v) {
44 value |= ((v & maskl) << Offset);
46 inline void operator &= (T v) {
47 value &= ~masks | ((v & maskl) << Offset);
51 inline void operator <<= (T v) {
56template <
typename T,
int Offset,
int Bits>
61 static const T maskl = (T(1) << Bits) - T(1);
62 static const T masks = maskl << Offset;
65 inline operator T()
const {
66 return (value >> Offset) & maskl;
69 inline void operator=(T v) {
70 value = (value & ~masks) | ((v & maskl) << Offset);
73 inline void operator |= (T v) {
74 value |= ((v & maskl) << Offset);
76 inline void operator &= (T v) {
77 value &= ~masks | ((v & maskl) << Offset);
81 inline void operator <<= (T v) {
86#define BEGIN_TYPE(typeName, T) \
90 inline void operator = (T v) { value = v; } \
91 inline operator volatile T& () { return value; } \
92 inline operator T () const { return value; } \
95#define ADD_BITFIELD_RO(memberName, offset, bits) \
96 add_bitfield_RO<basicType, offset, bits> memberName;
98#define ADD_BITFIELD_WO(memberName, offset, bits) \
99 add_bitfield_WO<basicType, offset, bits> memberName;
101#define ADD_BITFIELD_RW(memberName, offset, bits) \
102 add_bitfield_RW<basicType, offset, bits> memberName;