chore: 添加 parallel-hashmap 依赖和 natvis

This commit is contained in:
刘旭 2022-10-09 16:14:35 +08:00
commit de0d833271
5 changed files with 213 additions and 0 deletions

25
natvis/magpie.natvis Normal file
View file

@ -0,0 +1,25 @@
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="SmallVectorImpl&lt;*&gt;">
<DisplayString IncludeView ="elt0" Condition="Size == 0"></DisplayString>
<DisplayString IncludeView ="elt0">{(($T1*)BeginX)[0]}{*this,view(elt1)}</DisplayString>
<DisplayString IncludeView ="elt1" Condition="Size == 1"></DisplayString>
<DisplayString IncludeView ="elt1">, {(($T1*)BeginX)[1]}{*this,view(elt2)}</DisplayString>
<DisplayString IncludeView ="elt2" Condition="Size == 2"></DisplayString>
<DisplayString IncludeView ="elt2">, {(($T1*)BeginX)[2]}{*this,view(elt3)}</DisplayString>
<DisplayString IncludeView ="elt3" Condition="Size == 3"></DisplayString>
<DisplayString IncludeView ="elt3">, {(($T1*)BeginX)[3]}{*this,view(elt4)}</DisplayString>
<DisplayString IncludeView ="elt4" Condition="Size == 4"></DisplayString>
<DisplayString IncludeView ="elt4">, /* {Size - 4} more*/ </DisplayString>
<DisplayString Condition="Size == 0">empty</DisplayString>
<DisplayString Condition="Size != 0">{{{*this,view(elt0)}}}</DisplayString>
<DisplayString>Uninitialized</DisplayString>
<Expand>
<Item Name="[size]">Size</Item>
<Item Name="[capacity]">Capacity</Item>
<ArrayItems>
<Size>Size</Size>
<ValuePointer>($T1*)BeginX</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>

140
natvis/phmap.natvis Normal file
View file

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<!-- flat map/set -->
<Type Name="phmap::flat_hash_set&lt;*,*,*,*&gt;">
<AlternativeType Name="phmap::flat_hash_map&lt;*,*,*,*,*&gt;" />
<DisplayString>{{size = {size_}}}</DisplayString>
<Expand>
<CustomListItems MaxItemsPerView="1000" ExcludeView="Test">
<Variable Name="ctrl" InitialValue="ctrl_" />
<Variable Name="slot" InitialValue="slots_" />
<Variable Name="ctrl_end" InitialValue="ctrl_ + capacity_" />
<Variable Name="slot_end" InitialValue="slots_ + capacity_" />
<Size>size_</Size>
<Loop>
<Break Condition="slot == slot_end" />
<If Condition="*ctrl >= -1">
<Item>*slot,na</Item>
</If>
<Exec>++slot</Exec>
<Exec>++ctrl</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
<!-- node map/set - only difference is the **slot instead of *slot -->
<Type Name="phmap::node_hash_set&lt;*,*,*,*&gt;">
<AlternativeType Name="phmap::node_hash_map&lt;*,*,*,*,*&gt;" />
<DisplayString>{{size = {size_}}}</DisplayString>
<Expand>
<CustomListItems MaxItemsPerView="1000" ExcludeView="Test">
<Variable Name="ctrl" InitialValue="ctrl_" />
<Variable Name="slot" InitialValue="slots_" />
<Variable Name="ctrl_end" InitialValue="ctrl_ + capacity_" />
<Variable Name="slot_end" InitialValue="slots_ + capacity_" />
<Size>size_</Size>
<Loop>
<Break Condition="slot == slot_end" />
<If Condition="*ctrl >= -1">
<Item>**slot,na</Item>
</If>
<Exec>++slot</Exec>
<Exec>++ctrl</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
<Type Name="phmap::priv::map_slot_type&lt;*,*&gt;">
<DisplayString>{value}</DisplayString>
</Type>
<!-- flat map iterators -->
<Type Name="phmap::priv::raw_hash_set&lt;*,*,*,*&gt;::iterator">
<DisplayString Condition="ctrl_ == 0">unset</DisplayString>
<DisplayString Condition="!(*ctrl_ >= 0)">end()</DisplayString>
<DisplayString>{*slot_,na}</DisplayString>
</Type>
<!-- node map iterators - only difference is the **slot_ instead of * -->
<Type Name="phmap::priv::raw_hash_set&lt;phmap::priv::NodeHashSetPolicy&lt;*&gt;,*,*,*&gt;::iterator">
<DisplayString Condition="ctrl_ == 0">unset</DisplayString>
<DisplayString Condition="!(*ctrl_ >= 0)">end()</DisplayString>
<DisplayString>{**slot_,na}</DisplayString>
</Type>
<!-- parallel flat/node set -->
<Type Name="phmap::parallel_flat_hash_set&lt;*,*,*,*,*,*&gt;">
<AlternativeType Name="phmap::parallel_node_hash_set&lt;*,*,*,*,*,*&gt;" />
<DisplayString>{{size = ?}}</DisplayString>
<Expand>
<CustomListItems MaxItemsPerView="1000" ExcludeView="Test">
<Variable Name="idx" InitialValue="0" />
<Variable Name="maxidx" InitialValue="$T5" />
<Variable Name="ctrl" InitialValue="sets_._Elems[0].set_.ctrl_" />
<Variable Name="slot" InitialValue="sets_._Elems[0].set_.slots_" />
<Variable Name="ctrl_end" InitialValue="sets_._Elems[0].set_.ctrl_" />
<Variable Name="slot_end" InitialValue="sets_._Elems[0].set_.slots_" />
<Exec>maxidx = 2 &lt;&lt; maxidx</Exec>
<Loop>
<Break Condition="idx == maxidx" />
<Exec>ctrl = sets_._Elems[idx].set_.ctrl_</Exec>
<Exec>slot = sets_._Elems[idx].set_.slots_</Exec>
<Exec>ctrl_end = sets_._Elems[idx].set_.ctrl_ + sets_._Elems[idx].set_.capacity_</Exec>
<Exec>slot_end = sets_._Elems[idx].set_.slots_ + sets_._Elems[idx].set_.capacity_</Exec>
<Loop>
<Break Condition="slot == slot_end" />
<If Condition="*ctrl >= -1">
<Item>*slot,na</Item>
</If>
<Exec>++slot</Exec>
<Exec>++ctrl</Exec>
</Loop>
<Exec>++idx</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
<!-- parallel flat/node map - only difference is $T6 instead of $T5 -->
<Type Name="phmap::parallel_flat_hash_map&lt;*,*,*,*,*,*,*&gt;">
<AlternativeType Name="phmap::parallel_node_hash_map&lt;*,*,*,*,*,*,*&gt;" />
<DisplayString>{{size = ?}}</DisplayString>
<Expand>
<CustomListItems MaxItemsPerView="1000" ExcludeView="Test">
<Variable Name="idx" InitialValue="0" />
<Variable Name="maxidx" InitialValue="$T6" />
<Variable Name="ctrl" InitialValue="sets_._Elems[0].set_.ctrl_" />
<Variable Name="slot" InitialValue="sets_._Elems[0].set_.slots_" />
<Variable Name="ctrl_end" InitialValue="sets_._Elems[0].set_.ctrl_" />
<Variable Name="slot_end" InitialValue="sets_._Elems[0].set_.slots_" />
<Exec>maxidx = 2 &lt;&lt; maxidx</Exec>
<Loop>
<Break Condition="idx == maxidx" />
<Exec>ctrl = sets_._Elems[idx].set_.ctrl_</Exec>
<Exec>slot = sets_._Elems[idx].set_.slots_</Exec>
<Exec>ctrl_end = sets_._Elems[idx].set_.ctrl_ + sets_._Elems[idx].set_.capacity_</Exec>
<Exec>slot_end = sets_._Elems[idx].set_.slots_ + sets_._Elems[idx].set_.capacity_</Exec>
<Loop>
<Break Condition="slot == slot_end" />
<If Condition="*ctrl >= -1">
<Item>*slot,na</Item>
</If>
<Exec>++slot</Exec>
<Exec>++ctrl</Exec>
</Loop>
<Exec>++idx</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
<Type Name="phmap::priv::parallel_hash_set&lt;*,*,*,*,*,*,*&gt;::iterator">
<DisplayString>{it_,na}</DisplayString>
</Type>
</AutoVisualizer>

37
natvis/rapidjson.natvis Normal file
View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<!-- rapidjson::GenericValue - basic support -->
<Type Name="rapidjson::GenericValue&lt;*,*&gt;">
<DisplayString Condition="(data_.f.flags &amp; kTypeMask) == rapidjson::kNullType">null</DisplayString>
<DisplayString Condition="data_.f.flags == kTrueFlag">true</DisplayString>
<DisplayString Condition="data_.f.flags == kFalseFlag">false</DisplayString>
<DisplayString Condition="data_.f.flags == kShortStringFlag">{(const Ch*)data_.ss.str,na}</DisplayString>
<DisplayString Condition="(data_.f.flags &amp; kTypeMask) == rapidjson::kStringType">{(const Ch*)((size_t)data_.s.str &amp; 0x0000FFFFFFFFFFFF),[data_.s.length]na}</DisplayString>
<DisplayString Condition="(data_.f.flags &amp; kNumberIntFlag) == kNumberIntFlag">{data_.n.i.i}</DisplayString>
<DisplayString Condition="(data_.f.flags &amp; kNumberUintFlag) == kNumberUintFlag">{data_.n.u.u}</DisplayString>
<DisplayString Condition="(data_.f.flags &amp; kNumberInt64Flag) == kNumberInt64Flag">{data_.n.i64}</DisplayString>
<DisplayString Condition="(data_.f.flags &amp; kNumberUint64Flag) == kNumberUint64Flag">{data_.n.u64}</DisplayString>
<DisplayString Condition="(data_.f.flags &amp; kNumberDoubleFlag) == kNumberDoubleFlag">{data_.n.d}</DisplayString>
<DisplayString Condition="data_.f.flags == rapidjson::kObjectType">Object members={data_.o.size}</DisplayString>
<DisplayString Condition="data_.f.flags == rapidjson::kArrayType">Array members={data_.a.size}</DisplayString>
<Expand>
<Item Condition="data_.f.flags == rapidjson::kObjectType" Name="[size]">data_.o.size</Item>
<Item Condition="data_.f.flags == rapidjson::kObjectType" Name="[capacity]">data_.o.capacity</Item>
<ArrayItems Condition="data_.f.flags == rapidjson::kObjectType">
<Size>data_.o.size</Size>
<!-- NOTE: Rapidjson stores some extra data in the high bits of pointers, which is why the mask -->
<ValuePointer>(rapidjson::GenericMember&lt;$T1,$T2&gt;*)(((size_t)data_.o.members) &amp; 0x0000FFFFFFFFFFFF)</ValuePointer>
</ArrayItems>
<Item Condition="data_.f.flags == rapidjson::kArrayType" Name="[size]">data_.a.size</Item>
<Item Condition="data_.f.flags == rapidjson::kArrayType" Name="[capacity]">data_.a.capacity</Item>
<ArrayItems Condition="data_.f.flags == rapidjson::kArrayType">
<Size>data_.a.size</Size>
<!-- NOTE: Rapidjson stores some extra data in the high bits of pointers, which is why the mask -->
<ValuePointer>(rapidjson::GenericValue&lt;$T1,$T2&gt;*)(((size_t)data_.a.elements) &amp; 0x0000FFFFFFFFFFFF)</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>