• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="utf-8"?>
2<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
3  <Type Name="Base::array_view&lt;*&gt;">
4    <DisplayString>{{size={size_}}}</DisplayString>
5    <Expand>
6      <Item Name="[size]">size_</Item>
7      <ArrayItems>
8        <Size>size_</Size>
9        <ValuePointer>begin_</ValuePointer>
10      </ArrayItems>
11    </Expand>
12  </Type>
13  <Type Name="Base::vector&lt;*&gt;">
14    <DisplayString>{{size={size_}}}</DisplayString>
15    <Expand>
16      <Item Name="[size]">size_</Item>
17      <Item Name="[allocator]">allocator_</Item>
18      <Item Name="[capacity]">capacity_</Item>
19      <ArrayItems>
20        <Size>size_</Size>
21        <ValuePointer>($T1*)data_</ValuePointer>
22      </ArrayItems>
23    </Expand>
24  </Type>
25  <Type Name="Base::basic_string&lt;*&gt;">
26    <DisplayString Condition="!data_.longString.isShort &amp;&amp; (data_.longString.size == 0)">empty</DisplayString>
27    <DisplayString Condition="!data_.longString.isShort &amp;&amp; (data_.longString.size &gt; 0)">{($T1*)(data_.longString.begin),s}</DisplayString>
28    <DisplayString Condition="data_.longString.isShort &amp;&amp; ((shortCapacity - data_.shortString.size) == 0)">empty</DisplayString>
29    <DisplayString Condition="data_.longString.isShort &amp;&amp; ((shortCapacity - data_.shortString.size) &gt; 0)">{data_.shortString.begin + 1,s}</DisplayString>
30    <StringView Condition="!data_.longString.isShort &amp;&amp; (data_.longString.size &gt; 0)">($T1*)(data_.longString.begin),s</StringView>
31    <StringView Condition="data_.longString.isShort &amp;&amp; ((shortCapacity - data_.shortString.size) &gt; 0)">data_.shortString.begin + 1,s</StringView>
32    <Expand>
33      <CustomListItems>
34        <If Condition="data_.longString.isShort">
35          <Item Name="[capacity]">shortCapacity</Item>
36          <Item Name="[size]">shortCapacity - data_.shortString.size</Item>
37          <Item Name="[ptr]">($T1*)(data_.shortString.begin + 1)</Item>
38        </If>
39        <If Condition="!data_.longString.isShort">
40          <Item Name="[capacity]">data_.longString.capacity</Item>
41          <Item Name="[size]">data_.longString.size</Item>
42          <Item Name="[ptr]">($T1*)data_.longString.begin</Item>
43        </If>
44      </CustomListItems>
45    </Expand>
46  </Type>
47  <Type Name="Base::basic_string_view&lt;*&gt;">
48    <DisplayString Condition="size_==0">empty</DisplayString>
49    <DisplayString Condition="size_>0">{begin_,[size_]}</DisplayString>
50    <StringView Condition="size_>0">begin_,[size_]</StringView>
51    <Expand>
52      <ArrayItems>
53        <Size>size_</Size>
54        <ValuePointer>($T1*)begin_</ValuePointer>
55      </ArrayItems>
56    </Expand>
57  </Type>
58  <Type Name="Base::basic_fixed_string&lt;*&gt;">
59    <DisplayString Condition="len_==0">empty</DisplayString>
60    <DisplayString Condition="len_>0">{data_,[len_]}</DisplayString>
61    <StringView Condition="len_>0">data_,[len_]</StringView>
62    <Expand>
63      <ArrayItems>
64        <Size>len_</Size>
65        <ValuePointer>($T1*)data_</ValuePointer>
66      </ArrayItems>
67    </Expand>
68  </Type>
69
70  <Type Name="Base::pair&lt;*&gt;">
71    <DisplayString>{first}, {second}</DisplayString>
72    <Expand>
73      <Item Name="first">first</Item>
74      <Item Name="second">second</Item>
75    </Expand>
76  </Type>
77
78  <Type Name="Base::unordered_map_base&lt;*&gt;">
79    <DisplayString Condition="size_==0">empty</DisplayString>
80    <DisplayString Condition="size_>0">{{size={size_}}}</DisplayString>
81    <Expand>
82      <CustomListItems MaxItemsPerView="5000" ExcludeView="Test">
83        <Variable Name="index" InitialValue="0" />
84        <Variable Name="buckets" InitialValue="buckets_.size_" />
85        <Variable Name="pBucket" InitialValue="buckets_.data_" />
86        <Variable Name="node" InitialValue="*buckets_.data_" />
87
88        <Loop>
89          <If Condition="index >= buckets">
90            <Break/>
91          </If>
92          <If Condition="pBucket[index] != nullptr">
93            <Exec>node = *(pBucket + index)</Exec>
94            <Item Name="[{node->data.first}]">node->data.second</Item>
95            <Exec>node = node->next</Exec>
96            <Loop>
97              <If Condition="node != nullptr">
98                <Item Name="[{node->data.first}]">node->data.second</Item>
99                <Exec>node = node->next</Exec>
100              </If>
101              <Else>
102                <Break/>
103              </Else>
104            </Loop>
105          </If>
106          <Exec>index+=1</Exec>
107        </Loop>
108      </CustomListItems>
109    </Expand>
110  </Type>
111
112  <Type Name="Base::unique_ptr&lt;*&gt;">
113    <DisplayString Condition="ptr_ == nullptr">null</DisplayString>
114    <DisplayString>unique_ptr {*ptr_}</DisplayString>
115    <Expand>
116      <ExpandedItem>ptr_</ExpandedItem>
117    </Expand>
118  </Type>
119  <Type Name="Base::PropertyData">
120    <DisplayString>{{properties={props_.size_}}}</DisplayString>
121
122    <Expand>
123      <CustomListItems>
124        <Variable Name="i" InitialValue="0"/>
125        <Variable Name="ptr" InitialValue="0ull"/>
126        <Variable Name="hash" InitialValue="0ull"/>
127        <!--<Variable Name="name" InitialValue="(const string_view*)nullptr"/>-->
128        <Variable Name="name" InitialValue="(const char*)nullptr"/>
129        <Size>props_.size_</Size>
130        <Exec>i=0</Exec>
131        <Exec>ptr=0</Exec>
132        <Exec>name=0</Exec>
133        <Loop>
134          <!--<Item Name="{props_[i].name,na}">props_[i].type.name</Item>-->
135          <Exec>ptr=(((uintptr_t)data_)+props_[i].offset)</Exec>
136
137          <!--<Exec>name=&amp;props_[i].name</Exec>-->
138          <Exec>name=props_[i].name.begin_</Exec>
139          <Exec>hash=props_[i].type.compareHash</Exec>
140          <!-- can compare by name, like this. but this is unsafe since it misses the array... -->
141          <!--<Item Name="{name,na}" Condition="strcmp(&quot;uint32_t&quot;,props_[i].type.name.begin_)==0">*(uint32_t*)ptr</Item>-->
142
143          <!-- or hash like this -->
144          <Item Name="{name,na}" Condition="hash==0xa00a62a942b20165">*(float*)ptr</Item>
145          <Item Name="{name,na}" Condition="hash==0xd03d8582534ea008">*(uint8_t*)ptr</Item>
146          <Item Name="{name,na}" Condition="hash==0x32882d3b22f6b347">*(uint32_t*)ptr</Item>
147          <Item Name="{name,na}" Condition="hash==0x40eb7764c80bc470">*(uint64_t*)ptr</Item>
148          <Item Name="{name,na}" Condition="hash==0xcd2fd49bc6b014bd">*(bool*)ptr</Item>
149          <Item Name="{name,na}" Condition="hash==0xec1e7e12ad89ac3a">*(Base::IRenderDataStoreManager*)ptr</Item>
150          <Item Name="{name,na}" Condition="hash==0x757a4c2248c0b9da">*(Base::Entity*)ptr</Item>
151          <Item Name="{name,na}" Condition="hash==0x21e15240cce014d3">*(Base::GpuResourceHandle*)ptr</Item>
152          <Item Name="{name,na}" Condition="hash==0x91598cb8b6464ec3">*(Base::ResourceHandle*)ptr</Item>
153          <Item Name="{name,na}" Condition="hash==0xd30ef5cbeb1c566f">(char*)ptr,s</Item>
154          <Item Name="{name,na}" Condition="hash==0x5d863d348adb6e38">*(Base::Math::Vec3*)ptr</Item>
155          <Item Name="{name,na}" Condition="hash==0xbd2a98c671ac6319">*(Base::Math::Mat4X4*)ptr</Item>
156          <Item Name="{name,na}" Condition="hash==0x04265e5df5375480">*(Base::Math::Quat*)ptr</Item>
157
158          <!-- array types -->
159          <Item Name="{name,na}" Condition="hash==0x873dfbbafdddfeb7">(float*)ptr,[props_[i].count]</Item>
160          <Item Name="{name,na}" Condition="hash==0x8619d3da2a6707a5">(uint32_t*)ptr,[props_[i].count]</Item>
161          <Item Name="{name,na}" Condition="hash==0xe20c7b9b9145ccfc">(Base::Entity*)ptr,[props_[i].count]</Item>
162          <Item Name="{name,na}" Condition="hash==0x5e8a333040c05cb3">(Base::Math::Mat4X4*)ptr,[props_[i].count]</Item>
163          <Item Name="{name,na}" Condition="hash==0xe03a172042638626">(Base::Math::Vec3*)ptr,[props_[i].count]</Item>
164
165          <!-- complex types -->
166          <Item Name="{name,na}" Condition="hash==0x5bfe86140e100937">*(Base::vector&lt;Base::basic_string&lt;char&gt; &gt;*)ptr</Item>
167          <Item Name="{name,na}" Condition="hash==0xccfcf78fcb6a2dc2">*(Base::vector&lt;float&gt;*)ptr</Item>
168          <Exec>i++</Exec>
169        </Loop>
170      </CustomListItems>
171      <Item Name="[owner]">owner_</Item>
172      <Item Name="[size of data]">size_</Item>
173      <Item Name="[raw data]">data_</Item>
174      <Item Condition="dataHandle_!=nullptr" Name="[dataHandle]">dataHandle_</Item>
175      <Item Condition="dataW_!=data_" Name="[raw data]">dataW_</Item>
176      <Item Condition="dataHandleW_!=dataHandle_" Name="[dataHandleW]">dataHandleW_</Item>
177    </Expand>
178  </Type>
179</AutoVisualizer>