2015-11-01 05:01:51 +00:00
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
|
|
<!--
|
|
|
|
Copyright 2015 Scott Mansell
|
|
|
|
All rights reserved.
|
|
|
|
|
2021-07-05 02:15:36 +00:00
|
|
|
SPDX-License-Identifier: BSD-3-Clause
|
2015-11-01 05:01:51 +00:00
|
|
|
-->
|
|
|
|
|
2015-10-29 23:30:22 +00:00
|
|
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
2015-11-01 05:01:51 +00:00
|
|
|
<!--
|
|
|
|
This is a re-implementation of the abstract bitfield class' algrothm (in BitField.h)
|
2015-11-02 04:12:09 +00:00
|
|
|
for Visual Studio to use for pretty-printing during debugging.
|
2015-11-01 05:01:51 +00:00
|
|
|
-->
|
2022-01-02 22:36:20 +00:00
|
|
|
<Type Name="BitField<*,*,*,*>">
|
|
|
|
<DisplayString><![CDATA[{($T3)((storage >> $T1) & ((1 << $T2) - 1))}]]></DisplayString>
|
2015-10-29 23:30:22 +00:00
|
|
|
<Expand>
|
|
|
|
<Item Name="Offset">$T1</Item>
|
|
|
|
<Item Name="Size">$T2</Item>
|
|
|
|
</Expand>
|
|
|
|
</Type>
|
2015-10-30 01:05:14 +00:00
|
|
|
|
2022-01-02 22:36:20 +00:00
|
|
|
<!-- Similar re-implementation for BitFieldArray -->
|
|
|
|
<Type Name="BitFieldArray<*,*,*,*,*>">
|
2015-10-30 01:05:14 +00:00
|
|
|
<Expand>
|
2022-01-02 22:36:20 +00:00
|
|
|
<IndexListItems>
|
|
|
|
<Size>$T3</Size>
|
|
|
|
<ValueNode><![CDATA[($T4)((storage >> ($T1 + $T2*$i)) & ((1 << $T2) - 1))]]></ValueNode>
|
|
|
|
</IndexListItems>
|
|
|
|
<!-- Put these after the index list, so that the index list is the main thing in the unexpanded preview -->
|
2015-10-30 01:05:14 +00:00
|
|
|
<Item Name="Offset">$T1</Item>
|
|
|
|
<Item Name="Size">$T2</Item>
|
2022-01-02 22:36:20 +00:00
|
|
|
<Item Name="Count">$T3</Item>
|
2015-10-30 01:05:14 +00:00
|
|
|
</Expand>
|
|
|
|
</Type>
|
|
|
|
|
2022-01-02 22:36:20 +00:00
|
|
|
<!--Specialised versions for signed types-->
|
|
|
|
<Type Name="BitField<*,*,signed char,*>">
|
|
|
|
<!-- It seems like we can't use s8/s16/s32/s64, nor can we use std::int8_t or the like; we have to use these names -->
|
|
|
|
<AlternativeType Name="BitField<*,*,short,*>" />
|
|
|
|
<AlternativeType Name="BitField<*,*,int,*>" />
|
|
|
|
<AlternativeType Name="BitField<*,*,long long,*>" />
|
|
|
|
|
|
|
|
<!-- 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 negative) number. -->
|
|
|
|
<DisplayString Condition="(storage & (1 << ($T1 + $T2 - 1))) != 0">
|
|
|
|
<![CDATA[{($T3)((-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1)))}]]>
|
2015-10-30 01:05:14 +00:00
|
|
|
</DisplayString>
|
2022-01-02 22:36:20 +00:00
|
|
|
<DisplayString><![CDATA[{($T3)((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]></DisplayString>
|
2015-10-30 01:05:14 +00:00
|
|
|
<Expand>
|
|
|
|
<Item Name="Offset">$T1</Item>
|
|
|
|
<Item Name="Size">$T2</Item>
|
|
|
|
</Expand>
|
|
|
|
</Type>
|
2022-01-02 22:36:20 +00:00
|
|
|
|
|
|
|
<Type Name="BitFieldArray<*,*,*,signed char,*>">
|
|
|
|
<AlternativeType Name="BitFieldArray<*,*,*,short,*>" />
|
|
|
|
<AlternativeType Name="BitFieldArray<*,*,*,int,*>" />
|
|
|
|
<AlternativeType Name="BitFieldArray<*,*,*,long,*>" />
|
|
|
|
|
2015-10-30 01:05:14 +00:00
|
|
|
<Expand>
|
2022-01-02 22:36:20 +00:00
|
|
|
<IndexListItems>
|
|
|
|
<Size>$T3</Size>
|
|
|
|
<ValueNode Condition="(storage & (1 << ($T1 + $T2 * $i + $T2 - 1))) != 0">
|
|
|
|
<![CDATA[($T4)((-1 * (1 << ($T2-1))) + ((storage >> ($T1 + $T2*$i)) & ((1 << ($T2-1)) - 1)))]]>
|
|
|
|
</ValueNode>
|
|
|
|
<ValueNode><![CDATA[($T4)((storage >> ($T1 + $T2*$i)) & ((1 << ($T2-1)) - 1))]]></ValueNode>
|
|
|
|
</IndexListItems>
|
2015-10-30 01:05:14 +00:00
|
|
|
<Item Name="Offset">$T1</Item>
|
|
|
|
<Item Name="Size">$T2</Item>
|
2022-01-02 22:36:20 +00:00
|
|
|
<Item Name="Count">$T3</Item>
|
2015-10-30 01:05:14 +00:00
|
|
|
</Expand>
|
|
|
|
</Type>
|
2021-07-05 02:15:36 +00:00
|
|
|
</AutoVisualizer>
|