Bitfield: And then mess things up again by handling signed fields.
This is way more messy than it should be.
This commit is contained in:
parent
9125ab8304
commit
f0e5232fe0
|
@ -8,4 +8,53 @@
|
|||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
|
||||
<!--Specialised versions for signed types-->
|
||||
<Type Name="BitField<*,*,__int64>">
|
||||
<!-- This is what I have do to get a sign extension in this crappy natvis "language"
|
||||
Basically, we check the top bit, if it's one, we add the remaining
|
||||
bits to the smallest (most negitive) number. -->
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Oh, and I can't do a generic match for all signed types, so these are identical to the __int64 case above
|
||||
Would be nice if std::numeric_limits<$T3>::is_signed or std::is_signed<$T3>::value worked -->
|
||||
<Type Name="BitField<*,*,__int32>">
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
<Type Name="BitField<*,*,__int16>">
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
<Type Name="BitField<*,*,__int8>">
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
</AutoVisualizer>
|
Loading…
Reference in New Issue