19 #ifndef ATTRIBUTE_OFFSET_HPP
20 #define ATTRIBUTE_OFFSET_HPP
26 static void setOffset(Uint32 & desc, Uint32
offset);
27 static void setCharsetPos(Uint32 & desc, Uint32 offset);
28 static void setNullFlagPos(Uint32 & desc, Uint32 offset);
30 static Uint32 getOffset(
const Uint32 &);
31 static bool getCharsetFlag(
const Uint32 &);
32 static Uint32 getCharsetPos(
const Uint32 &);
33 static Uint32 getNullFlagPos(
const Uint32 &);
34 static Uint32 getNullFlagOffset(
const Uint32 &);
35 static Uint32 getNullFlagByteOffset(
const Uint32 & desc);
36 static Uint32 getNullFlagBitOffset(
const Uint32 &);
38 static Uint32 getMaxOffset();
60 #define AO_ATTRIBUTE_OFFSET_SHIFT 0
61 #define AO_ATTRIBUTE_OFFSET_MASK 0x7ff
63 #define AO_CHARSET_FLAG_SHIFT 11
64 #define AO_CHARSET_POS_SHIFT 12
65 #define AO_CHARSET_POS_MASK 127
67 #define AO_NULL_FLAG_POS_MASK 0xfff // f+w
68 #define AO_NULL_FLAG_POS_SHIFT 20
70 #define AO_NULL_FLAG_WORD_MASK 31 // f
71 #define AO_NULL_FLAG_OFFSET_SHIFT 5
72 #define AO_NULL_FLAG_BYTE_OFFSET_SHIFT 3
76 AttributeOffset::setOffset(Uint32 & desc, Uint32
offset){
77 ASSERT_MAX(offset, AO_ATTRIBUTE_OFFSET_MASK,
"AttributeOffset::setOffset");
78 desc &= ~(Uint32)(AO_ATTRIBUTE_OFFSET_MASK << AO_ATTRIBUTE_OFFSET_SHIFT);
79 desc |= (offset << AO_ATTRIBUTE_OFFSET_SHIFT);
84 AttributeOffset::setCharsetPos(Uint32 & desc, Uint32 offset) {
85 ASSERT_MAX(offset, AO_CHARSET_POS_MASK,
"AttributeOffset::setCharsetPos");
86 desc |= (1 << AO_CHARSET_FLAG_SHIFT);
87 desc |= (offset << AO_CHARSET_POS_SHIFT);
92 AttributeOffset::setNullFlagPos(Uint32 & desc, Uint32 pos){
93 ASSERT_MAX(pos, AO_NULL_FLAG_POS_MASK,
"AttributeOffset::setNullFlagPos");
94 desc |= (pos << AO_NULL_FLAG_POS_SHIFT);
99 AttributeOffset::getOffset(
const Uint32 & desc)
101 return (desc >> AO_ATTRIBUTE_OFFSET_SHIFT) & AO_ATTRIBUTE_OFFSET_MASK;
106 AttributeOffset::getCharsetFlag(
const Uint32 & desc)
108 return (desc >> AO_CHARSET_FLAG_SHIFT) & 1;
113 AttributeOffset::getCharsetPos(
const Uint32 & desc)
115 return (desc >> AO_CHARSET_POS_SHIFT) & AO_CHARSET_POS_MASK;
120 AttributeOffset::getNullFlagPos(
const Uint32 & desc)
122 return ((desc >> AO_NULL_FLAG_POS_SHIFT) & AO_NULL_FLAG_POS_MASK);
128 AttributeOffset::getNullFlagOffset(
const Uint32 & desc)
130 return (getNullFlagPos(desc) >> AO_NULL_FLAG_OFFSET_SHIFT);
136 AttributeOffset::getNullFlagByteOffset(
const Uint32 & desc)
138 return (getNullFlagPos(desc) >> AO_NULL_FLAG_BYTE_OFFSET_SHIFT);
143 AttributeOffset::getNullFlagBitOffset(
const Uint32 & desc)
145 return (getNullFlagPos(desc) & AO_NULL_FLAG_WORD_MASK);
150 AttributeOffset::getMaxOffset()
152 return AO_ATTRIBUTE_OFFSET_MASK;