Mercurial > minori
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 & 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)&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 << 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 << compact_alignment_log2)) - *(unsigned*)(attribute_this - attribute_T1 - (_page << 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 & ~(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 && 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 & hashmod</Exec> | |
77 | |
78 <!-- find() loop --> | |
79 <Loop Condition="probe <= hashmod &&_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) & hashmod</Exec> | |
88 <Exec>probe++</Exec> | |
89 </Loop> | |
90 | |
91 <Exec>attribute_data_copy = attribute_data</Exec> | |
92 | |
93 <If Condition="attribute_data_copy >= 255 && attribute_real"> | |
94 <Item Name="[{number}]">*attribute_real,view(child)</Item> | |
95 <Exec>attribute_this = (size_t)&(*attribute_real).next_attribute</Exec> | |
96 <Exec>attribute_data = (*attribute_real).next_attribute._data</Exec> | |
97 </If> | |
98 <If Condition="attribute_data_copy < 255 && attribute_short"> | |
99 <Item Name="[{number}]">*attribute_short,view(child)</Item> | |
100 <Exec>attribute_this = (size_t)&(*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 & ~(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="&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 << 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 << compact_alignment_log2)) - *(unsigned*)(child_this - child_T1 - (_page << 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 & ~(compact_alignment - 1)) + (child_data - 1 + child_T2) * compact_alignment)" /> | |
160 | |
161 <Variable Name="number" InitialValue="0" /> | |
162 | |
163 <Loop Condition="child_this && 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 & hashmod</Exec> | |
172 | |
173 <!-- find() loop --> | |
174 <Loop Condition="probe <= hashmod &&_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) & hashmod</Exec> | |
183 <Exec>probe++</Exec> | |
184 </Loop> | |
185 | |
186 <Exec>child_data_copy = child_data</Exec> | |
187 | |
188 <If Condition="child_data_copy >= 255 && child_real"> | |
189 <Item Name="[{number}]">*child_real,view(child)</Item> | |
190 <Exec>child_this = (size_t)&(*child_real).next_sibling</Exec> | |
191 <Exec>child_data = (*child_real).next_sibling._data</Exec> | |
192 </If> | |
193 <If Condition="child_data_copy < 255 && child_short"> | |
194 <Item Name="[{number}]">*child_short,view(child)</Item> | |
195 <Exec>child_this = (size_t)&(*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 & ~(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="&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 << 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 << compact_alignment_log2)) - *(unsigned*)(attribute_this - attribute_T1 - (_page << 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 & ~(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 & hashmod</Exec> | |
270 | |
271 <!-- find() loop --> | |
272 <Loop Condition="probe <= hashmod &&_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) & hashmod</Exec> | |
281 <Exec>probe++</Exec> | |
282 </Loop> | |
283 | |
284 <If Condition="attribute_data >= 255 && attribute_real"> | |
285 <Item Name="next_attribute">*attribute_real</Item> | |
286 </If> | |
287 <If Condition="attribute_data != 0 && attribute_data < 255 && 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<*,*>"> | |
295 <Expand HideRawView="1"> | |
296 <CustomListItems Condition="_data && _data < 255"> | |
297 <Variable Name="compact_alignment_log2" InitialValue="2" /> | |
298 <Variable Name="compact_alignment" InitialValue="1 << compact_alignment_log2" /> | |
299 | |
300 <!-- compact_get_page() --> | |
301 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" /> | |
302 <Variable Name="page" InitialValue="((this - $T1 - (_page << compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page << 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) << 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 && _data >= 255"> | |
312 <Variable Name="compact_alignment_log2" InitialValue="2" /> | |
313 <Variable Name="compact_alignment" InitialValue="1 << compact_alignment_log2" /> | |
314 | |
315 <!-- compact_get_page() --> | |
316 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" /> | |
317 <Variable Name="page" InitialValue="((this - $T1 - (_page << compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page << 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 & hashmod</Exec> | |
343 | |
344 <!-- find() loop --> | |
345 <Loop Condition="probe <= hashmod &&_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) & hashmod</Exec> | |
354 <Exec>probe++</Exec> | |
355 </Loop> | |
356 </CustomListItems> | |
357 </Expand> | |
358 </Type> | |
359 | |
360 <Type Name="pugi::impl::`anonymous-namespace'::compact_pointer<pugi::xml_node_struct,*,*>"> | |
361 <DisplayString Condition="!_data">nullptr</DisplayString> | |
362 <DisplayString Condition="_data">...</DisplayString> | |
363 | |
364 <Expand HideRawView="1"> | |
365 <CustomListItems Condition="_data && _data < 255"> | |
366 <Variable Name="compact_alignment_log2" InitialValue="2" /> | |
367 <Variable Name="compact_alignment" InitialValue="1 << compact_alignment_log2" /> | |
368 | |
369 <Item Name="value">*(pugi::xml_node_struct*)(((size_t)this & ~(compact_alignment - 1)) + (_data - 1 + $T2) * compact_alignment)</Item> | |
370 </CustomListItems> | |
371 | |
372 <CustomListItems Condition="_data && _data >= 255"> | |
373 <Variable Name="compact_alignment_log2" InitialValue="2" /> | |
374 <Variable Name="compact_alignment" InitialValue="1 << compact_alignment_log2" /> | |
375 | |
376 <!-- compact_get_page() --> | |
377 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" /> | |
378 <Variable Name="page" InitialValue="((this - $T1 - (_page << compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page << 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 & hashmod</Exec> | |
404 | |
405 <!-- find() loop --> | |
406 <Loop Condition="probe <= hashmod &&_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) & hashmod</Exec> | |
415 <Exec>probe++</Exec> | |
416 </Loop> | |
417 </CustomListItems> | |
418 </Expand> | |
419 </Type> | |
420 | |
421 <Type Name="pugi::impl::`anonymous-namespace'::compact_pointer<pugi::xml_attribute_struct,*,*>"> | |
422 <DisplayString Condition="!_data">nullptr</DisplayString> | |
423 <DisplayString Condition="_data">...</DisplayString> | |
424 | |
425 <Expand HideRawView="1"> | |
426 <CustomListItems Condition="_data && _data < 255"> | |
427 <Variable Name="compact_alignment_log2" InitialValue="2" /> | |
428 <Variable Name="compact_alignment" InitialValue="1 << compact_alignment_log2" /> | |
429 | |
430 <Item Name="value">*(pugi::xml_attribute_struct*)(((size_t)this & ~(compact_alignment - 1)) + (_data - 1 + $T2) * compact_alignment)</Item> | |
431 </CustomListItems> | |
432 | |
433 <CustomListItems Condition="_data && _data >= 255"> | |
434 <Variable Name="compact_alignment_log2" InitialValue="2" /> | |
435 <Variable Name="compact_alignment" InitialValue="1 << compact_alignment_log2" /> | |
436 | |
437 <!-- compact_get_page() --> | |
438 <Variable Name="_page" InitialValue="*(char*)(this - $T1)" /> | |
439 <Variable Name="page" InitialValue="((this - $T1 - (_page << compact_alignment_log2)) - *(unsigned*)(this - $T1 - (_page << 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 & hashmod</Exec> | |
465 | |
466 <!-- find() loop --> | |
467 <Loop Condition="probe <= hashmod &&_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) & 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 && _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 && !_attribute._attr">_node</ExpandedItem> | |
490 <ExpandedItem Condition="!_node._root && _attribute._attr">_attribute</ExpandedItem> | |
491 | |
492 <Item Name="node" Condition="_node._root && _attribute._attr">_node,na</Item> | |
493 <Item Name="attribute" Condition="_node._root && _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> |