19#ifndef _BITFIELD_DEFS_H_
20#define _BITFIELD_DEFS_H_
27template <
typename T,
int Offset,
int Bits>
32 static const T maskl = (T(1) << Bits) - T(1);
35 inline operator T()
const {
36 return (value >> Offset) & maskl;
40template <
typename T,
int Offset,
int Bits>
45 static const T maskl = (T(1) << Bits) - T(1);
46 static const T masks = maskl << Offset;
50 inline void operator = (T v) {
51 value = (value & ~masks) | ((v & maskl) << Offset);
54 inline void operator |= (T v) {
55 value |= ((v & maskl) << Offset);
57 inline void operator &= (T v) {
58 value &= ~masks | ((v & maskl) << Offset);
62 inline void operator <<= (T v) {
67template <
typename T,
int Offset,
int Bits>
72 static const T maskl = (T(1) << Bits) - T(1);
73 static const T masks = maskl << Offset;
76 inline operator T()
const {
77 return (value >> Offset) & maskl;
80 inline void operator=(T v) {
81 value = (value & ~masks) | ((v & maskl) << Offset);
84 inline void operator |= (T v) {
85 value |= ((v & maskl) << Offset);
87 inline void operator &= (T v) {
88 value &= ~masks | ((v & maskl) << Offset);
92 inline void operator <<= (T v) {
97#define BEGIN_TYPE(typeName, T) \
101 inline void operator = (T v) { value = v; } \
102 inline operator volatile T& () { return value; } \
103 inline operator T () const { return value; } \
106#define ADD_BITFIELD_RO(memberName, offset, bits) \
107 add_bitfield_RO<basicType, offset, bits> memberName;
109#define ADD_BITFIELD_WO(memberName, offset, bits) \
110 add_bitfield_WO<basicType, offset, bits> memberName;
112#define ADD_BITFIELD_RW(memberName, offset, bits) \
113 add_bitfield_RW<basicType, offset, bits> memberName;