Advertisement
hnOsmium0001

tsl::robin_map NatVis v1

Nov 11th, 2021
1,332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 2.22 KB | None | 0 0
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  3.     <Type Name="tsl::array_map&lt;*&gt;">
  4.         <!--
  5.             # Template parameters
  6.             $T1: typename CharT
  7.             $T2: typename T
  8.             $T3: typename Hash
  9.             $T4: typename KeyEqual
  10.             $T5: bool StoreNullTerminator
  11.             $T6: typename KeySizeT
  12.             $T7: typename IndexSizeT
  13.             $T8: typename GrowthPolicy
  14.         -->
  15.  
  16.         <Intrinsic Name="size" Expression="m_ht.m_nb_elements" />
  17.         <!-- Accessing intrinsics 'size' of std::vector -->
  18.         <Intrinsic Name="bucket_count" Expression="m_ht.m_buckets_data.size()" />
  19.  
  20.         <DisplayString>{{ size={size()} }}</DisplayString>
  21.         <Expand>
  22.             <Item Name="[bucket_count]">bucket_count()</Item>
  23.             <Item Name="[load_factor]">bucket_count() == 0 ? 0 : (int)((float)size() / (float)bucket_count())</Item>
  24.             <Item Name="[max_load_factor]">m_ht.m_max_load_factor</Item>
  25.             <Item Name="[load_threshold]">m_ht.m_load_threshold</Item>
  26.  
  27.             <CustomListItems>
  28.                 <Variable Name="i" InitialValue="0" />
  29.                 <Variable Name="bucket" InitialValue="m_ht.m_buckets" />
  30.                 <Variable Name="position" InitialValue="($T1*)0" />
  31.                 <Variable Name="keySize" InitialValue="0" />
  32.                 <Variable Name="key" InitialValue="($T1*)0" />
  33.  
  34.                 <Size>size() * 2</Size>
  35.                 <Loop>
  36.                     <If Condition="bucket-&gt;m_buffer != nullptr &amp;&amp; *(($T6*)(bucket-&gt;m_buffer)) != ht::array_bucket::END_OF_BUCKET">
  37.                         <Exec>position = bucket-&gt;m_buffer</Exec>
  38.  
  39.                         <Loop>
  40.                             <Exec>keySize = *(($T6*)position)</Exec>
  41.                             <Exec>position += sizeof($T6)</Exec>
  42.  
  43.                             <Break Condition="keySize == ht::array_bucket::END_OF_BUCKET" />
  44.  
  45.                             <Exec>key = position</Exec>
  46.                             <Exec>position += keySize + ($T5 ? 1 : 0)</Exec>
  47.  
  48.                             <!-- TODO use <Synthetic> when it is supported in list views -->
  49.                             <Item Name="[{i} key]">key,[keySize]s8b</Item>
  50.                             <Item Name="[{i} value]">m_ht.m_values._Mypair._Myval2._Myfirst[*(($T7*)position)]</Item>
  51.                             <Exec>++i</Exec>
  52.  
  53.                             <Exec>position += sizeof($T7)</Exec>
  54.                         </Loop>
  55.                     </If>
  56.  
  57.                     <Break Condition="bucket == (m_ht.m_buckets + bucket_count())" />
  58.                     <Exec>++bucket</Exec>
  59.                 </Loop>
  60.             </CustomListItems>
  61.         </Expand>
  62.     </Type>
  63. </AutoVisualizer>
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement