comparison dep/pugixml/scripts/natvis/pugixml_compact.natvis @ 367:8d45d892be88 default tip

*: instead of pugixml, use Qt XML features this means we have one extra Qt dependency though...
author Paper <paper@tflc.us>
date Sun, 17 Nov 2024 22:55:47 -0500
parents 886f66775f31
children
comparison
equal deleted inserted replaced
366:886f66775f31 367:8d45d892be88
1 <?xml version="1.0" encoding="utf-8"?>
2 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
3 <Type Name="pugi::xml_node">
4 <DisplayString Condition="_root">{_root}</DisplayString>
5 <DisplayString Condition="!_root">none</DisplayString>
6 <Expand>
7 <ExpandedItem Condition="_root">_root</ExpandedItem>
8 </Expand>
9 </Type>
10
11 <Type Name="pugi::xml_attribute">
12 <DisplayString Condition="_attr">{_attr}</DisplayString>
13 <DisplayString Condition="!_attr">none</DisplayString>
14 <Expand>
15 <ExpandedItem Condition="_attr">_attr</ExpandedItem>
16 </Expand>
17 </Type>
18
19 <Type Name="pugi::xml_node_struct">
20 <Expand>
21 <Item Name="type">(pugi::xml_node_type)(header._flags &amp; 15)</Item>
22 <Item Name="name" Condition="name._data">name,na</Item>
23 <Item Name="value" Condition="value._data">value,na</Item>
24
25 <Synthetic Name="attributes" Condition="first_attribute._data">
26 <DisplayString>...</DisplayString>
27 <Expand>
28 <CustomListItems>
29 <Variable Name="attribute_this" InitialValue="(size_t)&amp;first_attribute" />
30 <Variable Name="attribute_data" InitialValue="first_attribute._data" />
31 <Variable Name="attribute_data_copy" InitialValue="attribute_data" />
32
33 <!-- first_attribute struct template arguments -->
34 <Variable Name="attribute_T1" InitialValue="11" />
35 <Variable Name="attribute_T2" InitialValue="0" />
36
37 <Variable Name="compact_alignment_log2" InitialValue="2" />
38 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
39
40 <!-- compact_get_page() -->
41 <Variable Name="_page" InitialValue="*(char*)(attribute_this - attribute_T1)" />
42 <Variable Name="page" InitialValue="((attribute_this - attribute_T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(attribute_this - attribute_T1 - (_page &lt;&lt; compact_alignment_log2)))" />
43
44 <!-- page->allocator->_hash -->
45 <Variable Name="allocator" InitialValue="*(size_t*)page" />
46 <Variable Name="_hash" InitialValue="*(size_t*)(allocator + 2 * sizeof(size_t))" /><!--2 pointer offsetof(allocator, _hash)-->
47 <Variable Name="_items" InitialValue="*(size_t*)_hash" />
48 <Variable Name="_capacity" InitialValue="*((size_t*)_hash + 1)" /><!--1 pointer offsetof(_hash, _capacity)-->
49 <Variable Name="_count" InitialValue="*((size_t*)_hash + 2)" /><!--2 pointer offsetof(_hash, _count)-->
50
51 <!-- find() prolog -->
52 <Variable Name="hashmod" InitialValue="_capacity - 1" />
53
54 <Variable Name="h" InitialValue="(unsigned)attribute_this" />
55 <Variable Name="bucket" InitialValue="0" />
56
57 <Variable Name="probe" InitialValue="0" />
58 <Variable Name="probe_item" InitialValue="(size_t*)0" />
59
60 <Variable Name="attribute_real" InitialValue="(pugi::xml_attribute_struct*)0" />
61
62 <!-- if _data < 255 -->
63 <Variable Name="attribute_short" InitialValue="(pugi::xml_attribute_struct*)(((size_t)attribute_this &amp; ~(compact_alignment - 1)) + (attribute_data - 1 + attribute_T2) * compact_alignment)" />
64
65 <Variable Name="number" InitialValue="0" />
66
67 <!-- Loop over all attributes -->
68 <Loop Condition="attribute_this &amp;&amp; attribute_data">
69 <!-- find() hash -->
70 <Exec>h = h ^ (h >> 16)</Exec>
71 <Exec>h = h * (0x85ebca6bu)</Exec>
72 <Exec>h = h ^ (h >> 13)</Exec>
73 <Exec>h = h * (0xc2b2ae35u)</Exec>
74 <Exec>h = h ^ (h >> 16)</Exec>
75
76 <Exec>bucket = h &amp; hashmod</Exec>
77
78 <!-- find() loop -->
79 <Loop Condition="probe &lt;= hashmod &amp;&amp;_capacity">
80 <Exec>probe_item = (size_t*)_items + bucket * 2</Exec><!--2 pointer sizeof(item_t)-->
81
82 <If Condition="*probe_item == attribute_this || *probe_item == 0">
83 <Exec>attribute_real = *(pugi::xml_attribute_struct**)(probe_item + 1)</Exec><!--1 pointer offsetof(item_t, value)-->
84 <Break/>
85 </If>
86
87 <Exec>bucket = (bucket + probe + 1) &amp; hashmod</Exec>
88 <Exec>probe++</Exec>
89 </Loop>
90
91 <Exec>attribute_data_copy = attribute_data</Exec>
92
93 <If Condition="attribute_data_copy &gt;= 255 &amp;&amp; attribute_real">
94 <Item Name="[{number}]">*attribute_real,view(child)</Item>
95 <Exec>attribute_this = (size_t)&amp;(*attribute_real).next_attribute</Exec>
96 <Exec>attribute_data = (*attribute_real).next_attribute._data</Exec>
97 </If>
98 <If Condition="attribute_data_copy &lt; 255 &amp;&amp; attribute_short">
99 <Item Name="[{number}]">*attribute_short,view(child)</Item>
100 <Exec>attribute_this = (size_t)&amp;(*attribute_short).next_attribute</Exec>
101 <Exec>attribute_data = (*attribute_short).next_attribute._data</Exec>
102 </If>
103
104 <!-- next_attribute struct template arguments -->
105 <Exec>attribute_T1 = 7</Exec>
106 <Exec>attribute_T2 = 0</Exec>
107
108 <!-- find() prolog again -->
109 <Exec>h = (unsigned)attribute_this</Exec>
110 <Exec>bucket = 0</Exec>
111
112 <Exec>probe = 0</Exec>
113 <Exec>probe_item = (size_t*)0</Exec>
114
115 <Exec>attribute_real = (pugi::xml_attribute_struct*)0</Exec>
116 <Exec>attribute_short = (pugi::xml_attribute_struct*)(((size_t)attribute_this &amp; ~(compact_alignment - 1)) + (attribute_data - 1 + attribute_T2) * compact_alignment)</Exec>
117
118 <Exec>number++</Exec>
119 </Loop>
120 </CustomListItems>
121 </Expand>
122 </Synthetic>
123
124 <CustomListItems>
125 <Variable Name="child_this" InitialValue="&amp;first_child" />
126 <Variable Name="child_data" InitialValue="first_child._data" />
127 <Variable Name="child_data_copy" InitialValue="child_data" />
128
129 <!-- first_child struct template arguments -->
130 <Variable Name="child_T1" InitialValue="8" />
131 <Variable Name="child_T2" InitialValue="0" />
132
133 <Variable Name="compact_alignment_log2" InitialValue="2" />
134 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
135
136 <!-- compact_get_page() -->
137 <Variable Name="_page" InitialValue="*(char*)(child_this - child_T1)" />
138 <Variable Name="page" InitialValue="((child_this - child_T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(child_this - child_T1 - (_page &lt;&lt; compact_alignment_log2)))" />
139
140 <!-- page->allocator->_hash -->
141 <Variable Name="allocator" InitialValue="*(size_t*)page" />
142 <Variable Name="_hash" InitialValue="*(size_t*)(allocator + 2 * sizeof(size_t))" /><!--2 pointer offsetof(allocator, _hash)-->
143 <Variable Name="_items" InitialValue="*(size_t*)_hash" />
144 <Variable Name="_capacity" InitialValue="*((size_t*)_hash + 1)" /><!--1 pointer offsetof(_hash, _capacity)-->
145 <Variable Name="_count" InitialValue="*((size_t*)_hash + 2)" /><!--2 pointer offsetof(_hash, _count)-->
146
147 <!-- find() prolog -->
148 <Variable Name="hashmod" InitialValue="_capacity - 1" />
149
150 <Variable Name="h" InitialValue="(unsigned)child_this" />
151 <Variable Name="bucket" InitialValue="0" />
152
153 <Variable Name="probe" InitialValue="0" />
154 <Variable Name="probe_item" InitialValue="(size_t*)0" />
155
156 <Variable Name="child_real" InitialValue="(pugi::xml_node_struct*)0" />
157
158 <!-- if _data < 255 -->
159 <Variable Name="child_short" InitialValue="(pugi::xml_node_struct*)(((size_t)child_this &amp; ~(compact_alignment - 1)) + (child_data - 1 + child_T2) * compact_alignment)" />
160
161 <Variable Name="number" InitialValue="0" />
162
163 <Loop Condition="child_this &amp;&amp; child_data">
164 <!-- find() hash -->
165 <Exec>h = h ^ (h >> 16)</Exec>
166 <Exec>h = h * (0x85ebca6bu)</Exec>
167 <Exec>h = h ^ (h >> 13)</Exec>
168 <Exec>h = h * (0xc2b2ae35u)</Exec>
169 <Exec>h = h ^ (h >> 16)</Exec>
170
171 <Exec>bucket = h &amp; hashmod</Exec>
172
173 <!-- find() loop -->
174 <Loop Condition="probe &lt;= hashmod &amp;&amp;_capacity">
175 <Exec>probe_item = (size_t*)_items + bucket * 2</Exec><!--2 pointer sizeof(item_t)-->
176
177 <If Condition="*probe_item == child_this || *probe_item == 0">
178 <Exec>child_real = *(pugi::xml_node_struct**)(probe_item + 1)</Exec><!--1 pointer offsetof(item_t, value)-->
179 <Break/>
180 </If>
181
182 <Exec>bucket = (bucket + probe + 1) &amp; hashmod</Exec>
183 <Exec>probe++</Exec>
184 </Loop>
185
186 <Exec>child_data_copy = child_data</Exec>
187
188 <If Condition="child_data_copy &gt;= 255 &amp;&amp; child_real">
189 <Item Name="[{number}]">*child_real,view(child)</Item>
190 <Exec>child_this = (size_t)&amp;(*child_real).next_sibling</Exec>
191 <Exec>child_data = (*child_real).next_sibling._data</Exec>
192 </If>
193 <If Condition="child_data_copy &lt; 255 &amp;&amp; child_short">
194 <Item Name="[{number}]">*child_short,view(child)</Item>
195 <Exec>child_this = (size_t)&amp;(*child_short).next_sibling</Exec>
196 <Exec>child_data = (*child_short).next_sibling._data</Exec>
197 </If>
198
199 <!-- next_sibling struct template arguments -->
200 <Exec>child_T1 = 10</Exec>
201 <Exec>child_T2 = 0</Exec>
202
203 <!-- find() prolog again -->
204 <Exec>h = (unsigned)child_this</Exec>
205 <Exec>bucket = 0</Exec>
206
207 <Exec>probe = 0</Exec>
208 <Exec>probe_item = (size_t*)0</Exec>
209
210 <Exec>child_real = (pugi::xml_node_struct*)0</Exec>
211 <Exec>child_short = (pugi::xml_node_struct*)(((size_t)child_this &amp; ~(compact_alignment - 1)) + (child_data - 1 + child_T2) * compact_alignment)</Exec>
212
213 <Exec>number++</Exec>
214 </Loop>
215 </CustomListItems>
216
217 <Item Name="next_sibling" ExcludeView="child">next_sibling</Item>
218 </Expand>
219 </Type>
220
221 <Type Name="pugi::xml_attribute_struct">
222 <Expand>
223 <Item Name="name">name,na</Item>
224 <Item Name="value">value,na</Item>
225
226 <CustomListItems ExcludeView="child">
227 <Variable Name="attribute_this" InitialValue="&amp;next_attribute" />
228 <Variable Name="attribute_data" InitialValue="next_attribute._data" />
229
230 <!-- next_attribute struct template arguments -->
231 <Variable Name="attribute_T1" InitialValue="7" />
232 <Variable Name="attribute_T2" InitialValue="0" />
233
234 <Variable Name="compact_alignment_log2" InitialValue="2" />
235 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
236
237 <!-- compact_get_page() -->
238 <Variable Name="_page" InitialValue="*(char*)(attribute_this - attribute_T1)" />
239 <Variable Name="page" InitialValue="((attribute_this - attribute_T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(attribute_this - attribute_T1 - (_page &lt;&lt; compact_alignment_log2)))" />
240
241 <!-- page->allocator->_hash -->
242 <Variable Name="allocator" InitialValue="*(size_t*)page" />
243 <Variable Name="_hash" InitialValue="*(size_t*)(allocator + 2 * sizeof(size_t))" /><!--2 pointer offsetof(allocator, _hash)-->
244 <Variable Name="_items" InitialValue="*(size_t*)_hash" />
245 <Variable Name="_capacity" InitialValue="*((size_t*)_hash + 1)" /><!--1 pointer offsetof(_hash, _capacity)-->
246 <Variable Name="_count" InitialValue="*((size_t*)_hash + 2)" /><!--2 pointer offsetof(_hash, _count)-->
247
248 <!-- find() prolog -->
249 <Variable Name="hashmod" InitialValue="_capacity - 1" />
250
251 <Variable Name="h" InitialValue="(unsigned)attribute_this" />
252 <Variable Name="bucket" InitialValue="0" />
253
254 <Variable Name="probe" InitialValue="0" />
255 <Variable Name="probe_item" InitialValue="(size_t*)0" />
256
257 <Variable Name="attribute_real" InitialValue="(pugi::xml_attribute_struct*)0" />
258
259 <!-- if _data < 255 -->
260 <Variable Name="attribute_short" InitialValue="(pugi::xml_attribute_struct*)(((size_t)attribute_this &amp; ~(compact_alignment - 1)) + (attribute_data - 1 + attribute_T2) * compact_alignment)" />
261
262 <!-- find() hash -->
263 <Exec>h = h ^ (h >> 16)</Exec>
264 <Exec>h = h * (0x85ebca6bu)</Exec>
265 <Exec>h = h ^ (h >> 13)</Exec>
266 <Exec>h = h * (0xc2b2ae35u)</Exec>
267 <Exec>h = h ^ (h >> 16)</Exec>
268
269 <Exec>bucket = h &amp; hashmod</Exec>
270
271 <!-- find() loop -->
272 <Loop Condition="probe &lt;= hashmod &amp;&amp;_capacity">
273 <Exec>probe_item = (size_t*)_items + bucket * 2</Exec><!--2 pointer sizeof(item_t)-->
274
275 <If Condition="*probe_item == attribute_this || *probe_item == 0">
276 <Exec>attribute_real = *(pugi::xml_attribute_struct**)(probe_item + 1)</Exec><!--1 pointer offsetof(item_t, value)-->
277 <Break/>
278 </If>
279
280 <Exec>bucket = (bucket + probe + 1) &amp; hashmod</Exec>
281 <Exec>probe++</Exec>
282 </Loop>
283
284 <If Condition="attribute_data &gt;= 255 &amp;&amp; attribute_real">
285 <Item Name="next_attribute">*attribute_real</Item>
286 </If>
287 <If Condition="attribute_data != 0 &amp;&amp; attribute_data &lt; 255 &amp;&amp; attribute_short">
288 <Item Name="next_attribute">*attribute_short</Item>
289 </If>
290 </CustomListItems>
291 </Expand>
292 </Type>
293
294 <Type Name="pugi::impl::`anonymous-namespace'::compact_string&lt;*,*&gt;">
295 <Expand HideRawView="1">
296 <CustomListItems Condition="_data &amp;&amp; _data &lt; 255">
297 <Variable Name="compact_alignment_log2" InitialValue="2" />
298 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
299
300 <!-- compact_get_page() -->
301 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" />
302 <Variable Name="page" InitialValue="((this - $T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page &lt;&lt; compact_alignment_log2)))" />
303
304 <Variable Name="compact_string_base" InitialValue="*(size_t*)(page + 5 * sizeof(void*))" /><!-- 5 pointer offsetof(page, compact_string_base)-->
305 <Variable Name="base" InitialValue="this - $T2" />
306 <Variable Name="offset" InitialValue="((*(short*)base - 1) &lt;&lt; 7) + (_data - 1)" />
307
308 <Item Name="value">(pugi::char_t*)(compact_string_base + offset * sizeof(pugi::char_t)),na</Item>
309 </CustomListItems>
310
311 <CustomListItems Condition="_data &amp;&amp; _data &gt;= 255">
312 <Variable Name="compact_alignment_log2" InitialValue="2" />
313 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
314
315 <!-- compact_get_page() -->
316 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" />
317 <Variable Name="page" InitialValue="((this - $T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page &lt;&lt; compact_alignment_log2)))" />
318
319 <!-- page->allocator->_hash -->
320 <Variable Name="allocator" InitialValue="*(size_t*)page" />
321 <Variable Name="_hash" InitialValue="*(size_t*)(allocator + 2 * sizeof(size_t))" /><!--2 pointer offsetof(allocator, _hash)-->
322 <Variable Name="_items" InitialValue="*(size_t*)_hash" />
323 <Variable Name="_capacity" InitialValue="*((size_t*)_hash + 1)" /><!--1 pointer offsetof(_hash, _capacity)-->
324 <Variable Name="_count" InitialValue="*((size_t*)_hash + 2)" /><!--2 pointer offsetof(_hash, _count)-->
325
326 <!-- find() prolog -->
327 <Variable Name="hashmod" InitialValue="_capacity - 1" />
328
329 <Variable Name="h" InitialValue="(unsigned)this" />
330 <Variable Name="bucket" InitialValue="0" />
331
332 <Variable Name="probe" InitialValue="0" />
333 <Variable Name="probe_item" InitialValue="(size_t*)0" />
334
335 <!-- find() hash -->
336 <Exec>h = h ^ (h >> 16)</Exec>
337 <Exec>h = h * (0x85ebca6bu)</Exec>
338 <Exec>h = h ^ (h >> 13)</Exec>
339 <Exec>h = h * (0xc2b2ae35u)</Exec>
340 <Exec>h = h ^ (h >> 16)</Exec>
341
342 <Exec>bucket = h &amp; hashmod</Exec>
343
344 <!-- find() loop -->
345 <Loop Condition="probe &lt;= hashmod &amp;&amp;_capacity">
346 <Exec>probe_item = (size_t*)_items + bucket * 2</Exec><!--2 pointer sizeof(item_t)-->
347
348 <If Condition="*probe_item == this || *probe_item == 0">
349 <Item Name="value">*(pugi::char_t**)(probe_item + 1)</Item><!--1 pointer offsetof(item_t, value)-->
350 <Break/>
351 </If>
352
353 <Exec>bucket = (bucket + probe + 1) &amp; hashmod</Exec>
354 <Exec>probe++</Exec>
355 </Loop>
356 </CustomListItems>
357 </Expand>
358 </Type>
359
360 <Type Name="pugi::impl::`anonymous-namespace'::compact_pointer&lt;pugi::xml_node_struct,*,*&gt;">
361 <DisplayString Condition="!_data">nullptr</DisplayString>
362 <DisplayString Condition="_data">...</DisplayString>
363
364 <Expand HideRawView="1">
365 <CustomListItems Condition="_data &amp;&amp; _data &lt; 255">
366 <Variable Name="compact_alignment_log2" InitialValue="2" />
367 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
368
369 <Item Name="value">*(pugi::xml_node_struct*)(((size_t)this &amp; ~(compact_alignment - 1)) + (_data - 1 + $T2) * compact_alignment)</Item>
370 </CustomListItems>
371
372 <CustomListItems Condition="_data &amp;&amp; _data &gt;= 255">
373 <Variable Name="compact_alignment_log2" InitialValue="2" />
374 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
375
376 <!-- compact_get_page() -->
377 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" />
378 <Variable Name="page" InitialValue="((this - $T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page &lt;&lt; compact_alignment_log2)))" />
379
380 <!-- page->allocator->_hash -->
381 <Variable Name="allocator" InitialValue="*(size_t*)page" />
382 <Variable Name="_hash" InitialValue="*(size_t*)(allocator + 2 * sizeof(size_t))" /><!--2 pointer offsetof(allocator, _hash)-->
383 <Variable Name="_items" InitialValue="*(size_t*)_hash" />
384 <Variable Name="_capacity" InitialValue="*((size_t*)_hash + 1)" /><!--1 pointer offsetof(_hash, _capacity)-->
385 <Variable Name="_count" InitialValue="*((size_t*)_hash + 2)" /><!--2 pointer offsetof(_hash, _count)-->
386
387 <!-- find() prolog -->
388 <Variable Name="hashmod" InitialValue="_capacity - 1" />
389
390 <Variable Name="h" InitialValue="(unsigned)this" />
391 <Variable Name="bucket" InitialValue="0" />
392
393 <Variable Name="probe" InitialValue="0" />
394 <Variable Name="probe_item" InitialValue="(size_t*)0" />
395
396 <!-- find() hash -->
397 <Exec>h = h ^ (h >> 16)</Exec>
398 <Exec>h = h * (0x85ebca6bu)</Exec>
399 <Exec>h = h ^ (h >> 13)</Exec>
400 <Exec>h = h * (0xc2b2ae35u)</Exec>
401 <Exec>h = h ^ (h >> 16)</Exec>
402
403 <Exec>bucket = h &amp; hashmod</Exec>
404
405 <!-- find() loop -->
406 <Loop Condition="probe &lt;= hashmod &amp;&amp;_capacity">
407 <Exec>probe_item = (size_t*)_items + bucket * 2</Exec><!--2 pointer sizeof(item_t)-->
408
409 <If Condition="*probe_item == this || *probe_item == 0">
410 <Item Name="value">**(pugi::xml_node_struct**)(probe_item + 1)</Item><!--1 pointer offsetof(item_t, value)-->
411 <Break/>
412 </If>
413
414 <Exec>bucket = (bucket + probe + 1) &amp; hashmod</Exec>
415 <Exec>probe++</Exec>
416 </Loop>
417 </CustomListItems>
418 </Expand>
419 </Type>
420
421 <Type Name="pugi::impl::`anonymous-namespace'::compact_pointer&lt;pugi::xml_attribute_struct,*,*&gt;">
422 <DisplayString Condition="!_data">nullptr</DisplayString>
423 <DisplayString Condition="_data">...</DisplayString>
424
425 <Expand HideRawView="1">
426 <CustomListItems Condition="_data &amp;&amp; _data &lt; 255">
427 <Variable Name="compact_alignment_log2" InitialValue="2" />
428 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
429
430 <Item Name="value">*(pugi::xml_attribute_struct*)(((size_t)this &amp; ~(compact_alignment - 1)) + (_data - 1 + $T2) * compact_alignment)</Item>
431 </CustomListItems>
432
433 <CustomListItems Condition="_data &amp;&amp; _data &gt;= 255">
434 <Variable Name="compact_alignment_log2" InitialValue="2" />
435 <Variable Name="compact_alignment" InitialValue="1 &lt;&lt; compact_alignment_log2" />
436
437 <!-- compact_get_page() -->
438 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" />
439 <Variable Name="page" InitialValue="((this - $T1 - (_page &lt;&lt; compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page &lt;&lt; compact_alignment_log2)))" />
440
441 <!-- page->allocator->_hash -->
442 <Variable Name="allocator" InitialValue="*(size_t*)page" />
443 <Variable Name="_hash" InitialValue="*(size_t*)(allocator + 2 * sizeof(size_t))" /><!--2 pointer offsetof(allocator, _hash)-->
444 <Variable Name="_items" InitialValue="*(size_t*)_hash" />
445 <Variable Name="_capacity" InitialValue="*((size_t*)_hash + 1)" /><!--1 pointer offsetof(_hash, _capacity)-->
446 <Variable Name="_count" InitialValue="*((size_t*)_hash + 2)" /><!--2 pointer offsetof(_hash, _count)-->
447
448 <!-- find() prolog -->
449 <Variable Name="hashmod" InitialValue="_capacity - 1" />
450
451 <Variable Name="h" InitialValue="(unsigned)this" />
452 <Variable Name="bucket" InitialValue="0" />
453
454 <Variable Name="probe" InitialValue="0" />
455 <Variable Name="probe_item" InitialValue="(size_t*)0" />
456
457 <!-- find() hash -->
458 <Exec>h = h ^ (h >> 16)</Exec>
459 <Exec>h = h * (0x85ebca6bu)</Exec>
460 <Exec>h = h ^ (h >> 13)</Exec>
461 <Exec>h = h * (0xc2b2ae35u)</Exec>
462 <Exec>h = h ^ (h >> 16)</Exec>
463
464 <Exec>bucket = h &amp; hashmod</Exec>
465
466 <!-- find() loop -->
467 <Loop Condition="probe &lt;= hashmod &amp;&amp;_capacity">
468 <Exec>probe_item = (size_t*)_items + bucket * 2</Exec><!--2 pointer sizeof(item_t)-->
469
470 <If Condition="*probe_item == this || *probe_item == 0">
471 <Item Name="value">**(pugi::xml_attribute_struct**)(probe_item + 1)</Item><!--1 pointer offsetof(item_t, value)-->
472 <Break/>
473 </If>
474
475 <Exec>bucket = (bucket + probe + 1) &amp; hashmod</Exec>
476 <Exec>probe++</Exec>
477 </Loop>
478 </CustomListItems>
479 </Expand>
480 </Type>
481
482 <Type Name="pugi::xpath_node">
483 <DisplayString Condition="_node._root &amp;&amp; _attribute._attr">{_node,na} {_attribute,na}</DisplayString>
484 <DisplayString Condition="_node._root">{_node,na}</DisplayString>
485 <DisplayString Condition="_attribute._attr">{_attribute}</DisplayString>
486 <DisplayString>empty</DisplayString>
487
488 <Expand HideRawView="1">
489 <ExpandedItem Condition="_node._root &amp;&amp; !_attribute._attr">_node</ExpandedItem>
490 <ExpandedItem Condition="!_node._root &amp;&amp; _attribute._attr">_attribute</ExpandedItem>
491
492 <Item Name="node" Condition="_node._root &amp;&amp; _attribute._attr">_node,na</Item>
493 <Item Name="attribute" Condition="_node._root &amp;&amp; _attribute._attr">_attribute,na</Item>
494 </Expand>
495 </Type>
496
497 <Type Name="pugi::xpath_node_set">
498 <Expand>
499 <Item Name="type">_type</Item>
500 <ArrayItems>
501 <Size>_end - _begin</Size>
502 <ValuePointer>_begin</ValuePointer>
503 </ArrayItems>
504 </Expand>
505 </Type>
506 </AutoVisualizer>