xref: /aosp_15_r20/external/cronet/build/config/c++/libc++.natvis (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker<?xml version="1.0" encoding="utf-8" ?>
2*6777b538SAndroid Build Coastguard Worker<AutoVisualizer
3*6777b538SAndroid Build Coastguard Worker  xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker  <!-- libc++'s __compressed_pair is an internal type used pervasively for
6*6777b538SAndroid Build Coastguard Worker       doing the empty base class optimization.
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker       __compressed_pair<U,V> derives from __compressed_pair_elem<U,0> and
9*6777b538SAndroid Build Coastguard Worker       __compressed_pair_elem<V,1>. __compressed_pair_elem<T> is specialized on
10*6777b538SAndroid Build Coastguard Worker       a 3rd template parameter:
11*6777b538SAndroid Build Coastguard Worker       * if T is empty and non-final the 3rd param is 1 and it derives from T
12*6777b538SAndroid Build Coastguard Worker       * else it has a member variable __value_ of type T
13*6777b538SAndroid Build Coastguard Worker  -->
14*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::__compressed_pair_elem&lt;*,*,0&gt;">
15*6777b538SAndroid Build Coastguard Worker    <DisplayString>{__value_}</DisplayString>
16*6777b538SAndroid Build Coastguard Worker    <Expand>
17*6777b538SAndroid Build Coastguard Worker      <ExpandedItem>__value_</ExpandedItem>
18*6777b538SAndroid Build Coastguard Worker    </Expand>
19*6777b538SAndroid Build Coastguard Worker  </Type>
20*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::__compressed_pair_elem&lt;*,*,1&gt;">
21*6777b538SAndroid Build Coastguard Worker    <DisplayString>{*($T1*)this}</DisplayString>
22*6777b538SAndroid Build Coastguard Worker    <Expand>
23*6777b538SAndroid Build Coastguard Worker      <ExpandedItem>*($T1*)this</ExpandedItem>
24*6777b538SAndroid Build Coastguard Worker    </Expand>
25*6777b538SAndroid Build Coastguard Worker  </Type>
26*6777b538SAndroid Build Coastguard Worker
27*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::array&lt;*,*&gt;">
28*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={$T2} }}</DisplayString>
29*6777b538SAndroid Build Coastguard Worker    <Expand>
30*6777b538SAndroid Build Coastguard Worker      <ArrayItems>
31*6777b538SAndroid Build Coastguard Worker        <Size>$T2</Size>
32*6777b538SAndroid Build Coastguard Worker        <ValuePointer>__elems_</ValuePointer>
33*6777b538SAndroid Build Coastguard Worker      </ArrayItems>
34*6777b538SAndroid Build Coastguard Worker    </Expand>
35*6777b538SAndroid Build Coastguard Worker  </Type>
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Worker  <!--libc++'s short string optimization:
38*6777b538SAndroid Build Coastguard Worker      A basic_string is 3 size_t words long. In the "alternate string layout"
39*6777b538SAndroid Build Coastguard Worker      that we use, they are: pointer to data, size, capacity.
40*6777b538SAndroid Build Coastguard Worker      (In the normal layout, it's capacity, size, data instead.)
41*6777b538SAndroid Build Coastguard Worker      If a string is short enough that it fits in these three size_ts instead,
42*6777b538SAndroid Build Coastguard Worker      the string data is stored inline in these 3 words, with the last byte of
43*6777b538SAndroid Build Coastguard Worker      the storage storing the length of the string.
44*6777b538SAndroid Build Coastguard Worker      The highest bit of the "capacity" word is set for normal, "long" strings,
45*6777b538SAndroid Build Coastguard Worker      and that bit needs to be masked out to know the real capacity.
46*6777b538SAndroid Build Coastguard Worker      If this bit is not set, the string data is stored inline.
47*6777b538SAndroid Build Coastguard Worker      (In the normal layout, if the lowest bit in the first byte is set,
48*6777b538SAndroid Build Coastguard Worker      it's a "long" string, requiring a long string to always have even
49*6777b538SAndroid Build Coastguard Worker      capacity. A short string here stores its length in the first byte
50*6777b538SAndroid Build Coastguard Worker      and the inline data in the remaining storage.)
51*6777b538SAndroid Build Coastguard Worker  -->
52*6777b538SAndroid Build Coastguard Worker
53*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::basic_string&lt;char,*&gt;">
54*6777b538SAndroid Build Coastguard Worker    <!--<Intrinsic Name="is_long"
55*6777b538SAndroid Build Coastguard Worker            Expression="((__rep*)&amp;__r_)-&gt;__s.__size_ &amp; 0x80" />-->
56*6777b538SAndroid Build Coastguard Worker    <!-- The above doesn't work because of https://llvm.org/PR41615
57*6777b538SAndroid Build Coastguard Worker         TODO(thakis): Now that we have clang r362038, try the above approach
58*6777b538SAndroid Build Coastguard Worker                       again.
59*6777b538SAndroid Build Coastguard Worker         The below assumes the alternate string layout and little endianness :/
60*6777b538SAndroid Build Coastguard Worker    -->
61*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="is_long"
62*6777b538SAndroid Build Coastguard Worker        Expression="*(((char*)this) + 3*sizeof(size_t) - 1) &amp; 0x80" />
63*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="is_long()">{*(char**)this}</DisplayString>
64*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="!is_long()">{(char*)this}</DisplayString>
65*6777b538SAndroid Build Coastguard Worker    <StringView Condition="is_long()">*(char**)this</StringView>
66*6777b538SAndroid Build Coastguard Worker    <StringView Condition="!is_long()">(char*)this</StringView>
67*6777b538SAndroid Build Coastguard Worker    <Expand>
68*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]" Condition="is_long()"
69*6777b538SAndroid Build Coastguard Worker          ExcludeView="simple">((size_t*)this)[1]</Item>
70*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]" Condition="!is_long()"
71*6777b538SAndroid Build Coastguard Worker          ExcludeView="simple">*(((char*)this) + 3*sizeof(size_t) - 1)</Item>
72*6777b538SAndroid Build Coastguard Worker      <Item Name="[capacity]" Condition="is_long()" ExcludeView="simple">
73*6777b538SAndroid Build Coastguard Worker        ((size_t*)this)[2] &amp; (~((size_t)0) &gt;&gt; 1)
74*6777b538SAndroid Build Coastguard Worker      </Item>
75*6777b538SAndroid Build Coastguard Worker      <Item Name="[capacity]" Condition="!is_long()"
76*6777b538SAndroid Build Coastguard Worker          ExcludeView="simple">22</Item>
77*6777b538SAndroid Build Coastguard Worker      <ArrayItems>
78*6777b538SAndroid Build Coastguard Worker        <Size Condition="is_long()">((size_t*)this)[1]</Size>
79*6777b538SAndroid Build Coastguard Worker        <Size Condition="!is_long()">
80*6777b538SAndroid Build Coastguard Worker          *(((char*)this) + 3*sizeof(size_t) - 1)
81*6777b538SAndroid Build Coastguard Worker        </Size>
82*6777b538SAndroid Build Coastguard Worker        <ValuePointer Condition="is_long()">*(char**)this</ValuePointer>
83*6777b538SAndroid Build Coastguard Worker        <ValuePointer Condition="!is_long()">(char*)this</ValuePointer>
84*6777b538SAndroid Build Coastguard Worker      </ArrayItems>
85*6777b538SAndroid Build Coastguard Worker    </Expand>
86*6777b538SAndroid Build Coastguard Worker  </Type>
87*6777b538SAndroid Build Coastguard Worker
88*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::basic_string&lt;wchar_t,*&gt;">
89*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="is_long"
90*6777b538SAndroid Build Coastguard Worker        Expression="*(((char*)this) + 3*sizeof(size_t) - 1) &amp; 0x80" />
91*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="is_long()">{*(wchar_t**)this}</DisplayString>
92*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="!is_long()">{(wchar_t*)this}</DisplayString>
93*6777b538SAndroid Build Coastguard Worker    <StringView Condition="is_long()">*(wchar_t**)this</StringView>
94*6777b538SAndroid Build Coastguard Worker    <StringView Condition="!is_long()">(wchar_t*)this</StringView>
95*6777b538SAndroid Build Coastguard Worker    <Expand>
96*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]" Condition="is_long()"
97*6777b538SAndroid Build Coastguard Worker          ExcludeView="simple">((size_t*)this)[1]</Item>
98*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]" Condition="!is_long()"
99*6777b538SAndroid Build Coastguard Worker          ExcludeView="simple">*(((char*)this) + 3*sizeof(size_t) - 1)</Item>
100*6777b538SAndroid Build Coastguard Worker      <Item Name="[capacity]" Condition="is_long()" ExcludeView="simple">
101*6777b538SAndroid Build Coastguard Worker        ((size_t*)this)[2] &amp; (~((size_t)0) &gt;&gt; 1)
102*6777b538SAndroid Build Coastguard Worker      </Item>
103*6777b538SAndroid Build Coastguard Worker      <Item Name="[capacity]" Condition="!is_long()"
104*6777b538SAndroid Build Coastguard Worker          ExcludeView="simple">10</Item>
105*6777b538SAndroid Build Coastguard Worker      <ArrayItems>
106*6777b538SAndroid Build Coastguard Worker        <Size Condition="is_long()">((size_t*)this)[1]</Size>
107*6777b538SAndroid Build Coastguard Worker        <Size Condition="!is_long()">
108*6777b538SAndroid Build Coastguard Worker          *(((char*)this) + 3*sizeof(size_t) - 1)
109*6777b538SAndroid Build Coastguard Worker        </Size>
110*6777b538SAndroid Build Coastguard Worker        <ValuePointer Condition="is_long()">*(wchar_t**)this</ValuePointer>
111*6777b538SAndroid Build Coastguard Worker        <ValuePointer Condition="!is_long()">(wchar_t*)this</ValuePointer>
112*6777b538SAndroid Build Coastguard Worker      </ArrayItems>
113*6777b538SAndroid Build Coastguard Worker    </Expand>
114*6777b538SAndroid Build Coastguard Worker  </Type>
115*6777b538SAndroid Build Coastguard Worker
116*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::deque&lt;*,*&gt;">
117*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__size_" />
118*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="block_size"
119*6777b538SAndroid Build Coastguard Worker        Expression="sizeof($T1) &lt; 256 ? 4096 / sizeof($T1) : 16" />
120*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
121*6777b538SAndroid Build Coastguard Worker    <Expand>
122*6777b538SAndroid Build Coastguard Worker      <IndexListItems>
123*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
124*6777b538SAndroid Build Coastguard Worker        <ValueNode>
125*6777b538SAndroid Build Coastguard Worker          *(*(__map_.__begin_ + ($i + __start_) / block_size()) +
126*6777b538SAndroid Build Coastguard Worker                                ($i + __start_) % block_size())
127*6777b538SAndroid Build Coastguard Worker        </ValueNode>
128*6777b538SAndroid Build Coastguard Worker      </IndexListItems>
129*6777b538SAndroid Build Coastguard Worker    </Expand>
130*6777b538SAndroid Build Coastguard Worker  </Type>
131*6777b538SAndroid Build Coastguard Worker
132*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::forward_list&lt;*&gt;">
133*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="head"
134*6777b538SAndroid Build Coastguard Worker        Expression="((__node_pointer)&amp;__before_begin_)-&gt;__next_" />
135*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="head() == 0">empty</DisplayString>
136*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="head() != 0">non-empty</DisplayString>
137*6777b538SAndroid Build Coastguard Worker    <Expand>
138*6777b538SAndroid Build Coastguard Worker      <LinkedListItems>
139*6777b538SAndroid Build Coastguard Worker        <HeadPointer>head()</HeadPointer>
140*6777b538SAndroid Build Coastguard Worker        <NextPointer>__next_</NextPointer>
141*6777b538SAndroid Build Coastguard Worker        <ValueNode>__value_</ValueNode>
142*6777b538SAndroid Build Coastguard Worker      </LinkedListItems>
143*6777b538SAndroid Build Coastguard Worker    </Expand>
144*6777b538SAndroid Build Coastguard Worker  </Type>
145*6777b538SAndroid Build Coastguard Worker
146*6777b538SAndroid Build Coastguard Worker  <!-- Note: Not in Cr! But will win over the one in stl.natvis -->
147*6777b538SAndroid Build Coastguard Worker  <Type Name="std::initializer_list&lt;*&gt;">
148*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={__size_} }}</DisplayString>
149*6777b538SAndroid Build Coastguard Worker    <Expand>
150*6777b538SAndroid Build Coastguard Worker      <ArrayItems>
151*6777b538SAndroid Build Coastguard Worker        <Size>__size_</Size>
152*6777b538SAndroid Build Coastguard Worker        <ValuePointer>__begin_</ValuePointer>
153*6777b538SAndroid Build Coastguard Worker      </ArrayItems>
154*6777b538SAndroid Build Coastguard Worker    </Expand>
155*6777b538SAndroid Build Coastguard Worker  </Type>
156*6777b538SAndroid Build Coastguard Worker
157*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::list&lt;*&gt;">
158*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__size_alloc_" />
159*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
160*6777b538SAndroid Build Coastguard Worker    <Expand>
161*6777b538SAndroid Build Coastguard Worker      <LinkedListItems>
162*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
163*6777b538SAndroid Build Coastguard Worker        <HeadPointer>__end_.__next_</HeadPointer>
164*6777b538SAndroid Build Coastguard Worker        <NextPointer>__next_</NextPointer>
165*6777b538SAndroid Build Coastguard Worker        <ValueNode>
166*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::list&lt;$T1,$T2&gt;::__node_pointer)this)
167*6777b538SAndroid Build Coastguard Worker              -&gt;__value_
168*6777b538SAndroid Build Coastguard Worker        </ValueNode>
169*6777b538SAndroid Build Coastguard Worker      </LinkedListItems>
170*6777b538SAndroid Build Coastguard Worker    </Expand>
171*6777b538SAndroid Build Coastguard Worker  </Type>
172*6777b538SAndroid Build Coastguard Worker
173*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::map&lt;*&gt;">
174*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__tree_.__pair3_" />
175*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
176*6777b538SAndroid Build Coastguard Worker    <Expand>
177*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]">size()</Item>
178*6777b538SAndroid Build Coastguard Worker      <TreeItems>
179*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
180*6777b538SAndroid Build Coastguard Worker        <HeadPointer>
181*6777b538SAndroid Build Coastguard Worker          ((__node_pointer)&amp;__tree_.__pair1_)-&gt;__left_
182*6777b538SAndroid Build Coastguard Worker        </HeadPointer>
183*6777b538SAndroid Build Coastguard Worker        <LeftPointer>
184*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::map&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
185*6777b538SAndroid Build Coastguard Worker              -&gt;__left_
186*6777b538SAndroid Build Coastguard Worker        </LeftPointer>
187*6777b538SAndroid Build Coastguard Worker        <RightPointer>
188*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::map&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
189*6777b538SAndroid Build Coastguard Worker              -&gt;__right_
190*6777b538SAndroid Build Coastguard Worker        </RightPointer>
191*6777b538SAndroid Build Coastguard Worker        <ValueNode>
192*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::map&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
193*6777b538SAndroid Build Coastguard Worker              -&gt;__value_.__cc_
194*6777b538SAndroid Build Coastguard Worker        </ValueNode>
195*6777b538SAndroid Build Coastguard Worker      </TreeItems>
196*6777b538SAndroid Build Coastguard Worker    </Expand>
197*6777b538SAndroid Build Coastguard Worker  </Type>
198*6777b538SAndroid Build Coastguard Worker
199*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::multimap&lt;*&gt;">
200*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__tree_.__pair3_" />
201*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
202*6777b538SAndroid Build Coastguard Worker    <Expand>
203*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]">size()</Item>
204*6777b538SAndroid Build Coastguard Worker      <TreeItems>
205*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
206*6777b538SAndroid Build Coastguard Worker        <HeadPointer>
207*6777b538SAndroid Build Coastguard Worker          ((__node_pointer)&amp;__tree_.__pair1_)-&gt;__left_
208*6777b538SAndroid Build Coastguard Worker        </HeadPointer>
209*6777b538SAndroid Build Coastguard Worker        <LeftPointer>
210*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::multimap&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
211*6777b538SAndroid Build Coastguard Worker              -&gt;__left_
212*6777b538SAndroid Build Coastguard Worker        </LeftPointer>
213*6777b538SAndroid Build Coastguard Worker        <RightPointer>
214*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::multimap&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
215*6777b538SAndroid Build Coastguard Worker              -&gt;__right_
216*6777b538SAndroid Build Coastguard Worker        </RightPointer>
217*6777b538SAndroid Build Coastguard Worker        <ValueNode>
218*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::multimap&lt;$T1,$T2,$T3,$T4&gt;::__node_pointer)this)
219*6777b538SAndroid Build Coastguard Worker              -&gt;__value_.__cc_
220*6777b538SAndroid Build Coastguard Worker        </ValueNode>
221*6777b538SAndroid Build Coastguard Worker      </TreeItems>
222*6777b538SAndroid Build Coastguard Worker    </Expand>
223*6777b538SAndroid Build Coastguard Worker  </Type>
224*6777b538SAndroid Build Coastguard Worker
225*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::multiset&lt;*&gt;">
226*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__tree_.__pair3_" />
227*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
228*6777b538SAndroid Build Coastguard Worker    <Expand>
229*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]">size()</Item>
230*6777b538SAndroid Build Coastguard Worker      <TreeItems>
231*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
232*6777b538SAndroid Build Coastguard Worker        <HeadPointer>
233*6777b538SAndroid Build Coastguard Worker          ((__base::__node_pointer)&amp;__tree_.__pair1_)-&gt;__left_
234*6777b538SAndroid Build Coastguard Worker        </HeadPointer>
235*6777b538SAndroid Build Coastguard Worker        <LeftPointer>
236*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::multiset&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
237*6777b538SAndroid Build Coastguard Worker              -&gt;__left_
238*6777b538SAndroid Build Coastguard Worker        </LeftPointer>
239*6777b538SAndroid Build Coastguard Worker        <RightPointer>
240*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::multiset&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
241*6777b538SAndroid Build Coastguard Worker              -&gt;__right_
242*6777b538SAndroid Build Coastguard Worker        </RightPointer>
243*6777b538SAndroid Build Coastguard Worker        <ValueNode>
244*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::multiset&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
245*6777b538SAndroid Build Coastguard Worker              -&gt;__value_
246*6777b538SAndroid Build Coastguard Worker        </ValueNode>
247*6777b538SAndroid Build Coastguard Worker      </TreeItems>
248*6777b538SAndroid Build Coastguard Worker    </Expand>
249*6777b538SAndroid Build Coastguard Worker  </Type>
250*6777b538SAndroid Build Coastguard Worker
251*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::optional&lt;*&gt;">
252*6777b538SAndroid Build Coastguard Worker    <DisplayString Condition="!__engaged_">nullopt</DisplayString>
253*6777b538SAndroid Build Coastguard Worker    <DisplayString>{__val_}</DisplayString>
254*6777b538SAndroid Build Coastguard Worker    <Expand>
255*6777b538SAndroid Build Coastguard Worker      <ExpandedItem Condition="__engaged_">__val_</ExpandedItem>
256*6777b538SAndroid Build Coastguard Worker    </Expand>
257*6777b538SAndroid Build Coastguard Worker  </Type>
258*6777b538SAndroid Build Coastguard Worker
259*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::priority_queue&lt;*&gt;">
260*6777b538SAndroid Build Coastguard Worker    <DisplayString>{c}</DisplayString>
261*6777b538SAndroid Build Coastguard Worker    <Expand>
262*6777b538SAndroid Build Coastguard Worker      <ExpandedItem>c</ExpandedItem>
263*6777b538SAndroid Build Coastguard Worker      <Item Name="[comp]">comp</Item>
264*6777b538SAndroid Build Coastguard Worker    </Expand>
265*6777b538SAndroid Build Coastguard Worker  </Type>
266*6777b538SAndroid Build Coastguard Worker
267*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::set&lt;*&gt;">
268*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__tree_.__pair3_" />
269*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
270*6777b538SAndroid Build Coastguard Worker    <Expand>
271*6777b538SAndroid Build Coastguard Worker      <Item Name="[size]">size()</Item>
272*6777b538SAndroid Build Coastguard Worker      <TreeItems>
273*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
274*6777b538SAndroid Build Coastguard Worker        <HeadPointer>
275*6777b538SAndroid Build Coastguard Worker          ((__base::__node_pointer)&amp;__tree_.__pair1_)-&gt;__left_
276*6777b538SAndroid Build Coastguard Worker        </HeadPointer>
277*6777b538SAndroid Build Coastguard Worker        <LeftPointer>
278*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::set&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
279*6777b538SAndroid Build Coastguard Worker              -&gt;__left_
280*6777b538SAndroid Build Coastguard Worker        </LeftPointer>
281*6777b538SAndroid Build Coastguard Worker        <RightPointer>
282*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::set&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
283*6777b538SAndroid Build Coastguard Worker              -&gt;__right_
284*6777b538SAndroid Build Coastguard Worker        </RightPointer>
285*6777b538SAndroid Build Coastguard Worker        <ValueNode>
286*6777b538SAndroid Build Coastguard Worker          ((std::__Cr::set&lt;$T1,$T2,$T3&gt;::__base::__node_pointer)this)
287*6777b538SAndroid Build Coastguard Worker              -&gt;__value_
288*6777b538SAndroid Build Coastguard Worker        </ValueNode>
289*6777b538SAndroid Build Coastguard Worker      </TreeItems>
290*6777b538SAndroid Build Coastguard Worker    </Expand>
291*6777b538SAndroid Build Coastguard Worker  </Type>
292*6777b538SAndroid Build Coastguard Worker
293*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::stack&lt;*&gt;">
294*6777b538SAndroid Build Coastguard Worker    <AlternativeType Name="std::__Cr::queue&lt;*&gt;" />
295*6777b538SAndroid Build Coastguard Worker    <DisplayString>{c}</DisplayString>
296*6777b538SAndroid Build Coastguard Worker    <Expand>
297*6777b538SAndroid Build Coastguard Worker      <ExpandedItem>c</ExpandedItem>
298*6777b538SAndroid Build Coastguard Worker    </Expand>
299*6777b538SAndroid Build Coastguard Worker  </Type>
300*6777b538SAndroid Build Coastguard Worker
301*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::__tuple_leaf&lt;*,*,0&gt;">
302*6777b538SAndroid Build Coastguard Worker    <DisplayString>{__value_}</DisplayString>
303*6777b538SAndroid Build Coastguard Worker  </Type>
304*6777b538SAndroid Build Coastguard Worker
305*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;&gt;">
306*6777b538SAndroid Build Coastguard Worker    <DisplayString>()</DisplayString>
307*6777b538SAndroid Build Coastguard Worker  </Type>
308*6777b538SAndroid Build Coastguard Worker
309*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*&gt;">
310*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_})</DisplayString>
311*6777b538SAndroid Build Coastguard Worker      <Expand>
312*6777b538SAndroid Build Coastguard Worker          <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
313*6777b538SAndroid Build Coastguard Worker      </Expand>
314*6777b538SAndroid Build Coastguard Worker  </Type>
315*6777b538SAndroid Build Coastguard Worker
316*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*,*&gt;">
317*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_})</DisplayString>
318*6777b538SAndroid Build Coastguard Worker    <Expand>
319*6777b538SAndroid Build Coastguard Worker      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
320*6777b538SAndroid Build Coastguard Worker      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
321*6777b538SAndroid Build Coastguard Worker    </Expand>
322*6777b538SAndroid Build Coastguard Worker  </Type>
323*6777b538SAndroid Build Coastguard Worker
324*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*,*,*&gt;">
325*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_})</DisplayString>
326*6777b538SAndroid Build Coastguard Worker    <Expand>
327*6777b538SAndroid Build Coastguard Worker      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
328*6777b538SAndroid Build Coastguard Worker      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
329*6777b538SAndroid Build Coastguard Worker      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
330*6777b538SAndroid Build Coastguard Worker    </Expand>
331*6777b538SAndroid Build Coastguard Worker  </Type>
332*6777b538SAndroid Build Coastguard Worker
333*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*,*,*,*&gt;">
334*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_})</DisplayString>
335*6777b538SAndroid Build Coastguard Worker    <Expand>
336*6777b538SAndroid Build Coastguard Worker      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
337*6777b538SAndroid Build Coastguard Worker      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
338*6777b538SAndroid Build Coastguard Worker      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
339*6777b538SAndroid Build Coastguard Worker      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
340*6777b538SAndroid Build Coastguard Worker    </Expand>
341*6777b538SAndroid Build Coastguard Worker  </Type>
342*6777b538SAndroid Build Coastguard Worker
343*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*,*,*,*,*&gt;">
344*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_})</DisplayString>
345*6777b538SAndroid Build Coastguard Worker    <Expand>
346*6777b538SAndroid Build Coastguard Worker      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
347*6777b538SAndroid Build Coastguard Worker      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
348*6777b538SAndroid Build Coastguard Worker      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
349*6777b538SAndroid Build Coastguard Worker      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
350*6777b538SAndroid Build Coastguard Worker      <Item Name="[4]">(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_</Item>
351*6777b538SAndroid Build Coastguard Worker    </Expand>
352*6777b538SAndroid Build Coastguard Worker  </Type>
353*6777b538SAndroid Build Coastguard Worker
354*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*,*,*,*,*,*&gt;">
355*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_})</DisplayString>
356*6777b538SAndroid Build Coastguard Worker    <Expand>
357*6777b538SAndroid Build Coastguard Worker      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
358*6777b538SAndroid Build Coastguard Worker      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
359*6777b538SAndroid Build Coastguard Worker      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
360*6777b538SAndroid Build Coastguard Worker      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
361*6777b538SAndroid Build Coastguard Worker      <Item Name="[4]">(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_</Item>
362*6777b538SAndroid Build Coastguard Worker      <Item Name="[5]">(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_</Item>
363*6777b538SAndroid Build Coastguard Worker    </Expand>
364*6777b538SAndroid Build Coastguard Worker  </Type>
365*6777b538SAndroid Build Coastguard Worker
366*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::tuple&lt;*,*,*,*,*,*,*&gt;">
367*6777b538SAndroid Build Coastguard Worker    <DisplayString>({(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_}, {(std::__Cr::__tuple_leaf&lt;6,$T7,0&gt;)__base_})</DisplayString>
368*6777b538SAndroid Build Coastguard Worker    <Expand>
369*6777b538SAndroid Build Coastguard Worker      <Item Name="[0]">(std::__Cr::__tuple_leaf&lt;0,$T1,0&gt;)__base_</Item>
370*6777b538SAndroid Build Coastguard Worker      <Item Name="[1]">(std::__Cr::__tuple_leaf&lt;1,$T2,0&gt;)__base_</Item>
371*6777b538SAndroid Build Coastguard Worker      <Item Name="[2]">(std::__Cr::__tuple_leaf&lt;2,$T3,0&gt;)__base_</Item>
372*6777b538SAndroid Build Coastguard Worker      <Item Name="[3]">(std::__Cr::__tuple_leaf&lt;3,$T4,0&gt;)__base_</Item>
373*6777b538SAndroid Build Coastguard Worker      <Item Name="[4]">(std::__Cr::__tuple_leaf&lt;4,$T5,0&gt;)__base_</Item>
374*6777b538SAndroid Build Coastguard Worker      <Item Name="[5]">(std::__Cr::__tuple_leaf&lt;5,$T6,0&gt;)__base_</Item>
375*6777b538SAndroid Build Coastguard Worker      <Item Name="[6]">(std::__Cr::__tuple_leaf&lt;6,$T7,0&gt;)__base_</Item>
376*6777b538SAndroid Build Coastguard Worker    </Expand>
377*6777b538SAndroid Build Coastguard Worker  </Type>
378*6777b538SAndroid Build Coastguard Worker
379*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::unique_ptr&lt;*&gt;">
380*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="value" Expression="*($T1**)&amp;__ptr_" />
381*6777b538SAndroid Build Coastguard Worker    <SmartPointer Usage="Minimal">value()</SmartPointer>
382*6777b538SAndroid Build Coastguard Worker      <DisplayString Condition="value() == 0">empty</DisplayString>
383*6777b538SAndroid Build Coastguard Worker      <DisplayString Condition="value() != 0">
384*6777b538SAndroid Build Coastguard Worker        unique_ptr {value()}</DisplayString>
385*6777b538SAndroid Build Coastguard Worker      <Expand>
386*6777b538SAndroid Build Coastguard Worker        <Item Condition="value() != 0" Name="[ptr]">value()</Item>
387*6777b538SAndroid Build Coastguard Worker      </Expand>
388*6777b538SAndroid Build Coastguard Worker  </Type>
389*6777b538SAndroid Build Coastguard Worker
390*6777b538SAndroid Build Coastguard Worker<Type Name="std::__Cr::unordered_map&lt;*&gt;">
391*6777b538SAndroid Build Coastguard Worker    <AlternativeType Name="std::__Cr::unordered_multimap&lt;*&gt;" />
392*6777b538SAndroid Build Coastguard Worker    <AlternativeType Name="std::__Cr::unordered_multiset&lt;*&gt;" />
393*6777b538SAndroid Build Coastguard Worker    <AlternativeType Name="std::__Cr::unordered_set&lt;*&gt;" />
394*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="*(size_type*)&amp;__table_.__p2_" />
395*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="bucket_count"
396*6777b538SAndroid Build Coastguard Worker        Expression="*(size_type*)&amp;
397*6777b538SAndroid Build Coastguard Worker                    ((__table::__bucket_list_deleter*)
398*6777b538SAndroid Build Coastguard Worker                        ((void**)&amp;__table_.__bucket_list_ + 1))
399*6777b538SAndroid Build Coastguard Worker                        -&gt;__data_" />
400*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
401*6777b538SAndroid Build Coastguard Worker    <Expand>
402*6777b538SAndroid Build Coastguard Worker      <Item Name="[bucket_count]">bucket_count()</Item>
403*6777b538SAndroid Build Coastguard Worker      <Item Name="[load_factor]">
404*6777b538SAndroid Build Coastguard Worker        bucket_count() != 0 ? (float)size() / bucket_count() : 0.f</Item>
405*6777b538SAndroid Build Coastguard Worker      <Item Name="[max_load_factor]">*(float*)&amp;__table_.__p3_</Item>
406*6777b538SAndroid Build Coastguard Worker      <!-- Use CustomListItems instead of LinkedListItems because we
407*6777b538SAndroid Build Coastguard Worker        need to cast to __table::__node_pointer and LinkedListItems
408*6777b538SAndroid Build Coastguard Worker        evaluates <Value> in the context of the node, not of the container,
409*6777b538SAndroid Build Coastguard Worker        so we'd have to say std::unordered_map<$T1,...>::__table::__node_pointer
410*6777b538SAndroid Build Coastguard Worker        and then we couldn't share this <Type> between unordered_(multi)map
411*6777b538SAndroid Build Coastguard Worker        and unordered_(multi)set. -->
412*6777b538SAndroid Build Coastguard Worker      <CustomListItems>
413*6777b538SAndroid Build Coastguard Worker        <Variable Name="node"
414*6777b538SAndroid Build Coastguard Worker            InitialValue="*(__table::__next_pointer*)&amp;__table_.__p1_" />
415*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
416*6777b538SAndroid Build Coastguard Worker        <Loop>
417*6777b538SAndroid Build Coastguard Worker          <Item>(*(__table::__node_pointer*)&amp;node)-&gt;__value_</Item>
418*6777b538SAndroid Build Coastguard Worker          <Exec>node = node-&gt;__next_</Exec>
419*6777b538SAndroid Build Coastguard Worker        </Loop>
420*6777b538SAndroid Build Coastguard Worker      </CustomListItems>
421*6777b538SAndroid Build Coastguard Worker    </Expand>
422*6777b538SAndroid Build Coastguard Worker  </Type>
423*6777b538SAndroid Build Coastguard Worker  <!-- This is the node __value_ of an unordered_(multi)map. Expand it through
424*6777b538SAndroid Build Coastguard Worker    a separate formatter instead of in the <Item> expression above so that the
425*6777b538SAndroid Build Coastguard Worker    same <Type> works for unordered_(multi)set and unordered_(multi)map. -->
426*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::__hash_value_type&lt;*&gt;">
427*6777b538SAndroid Build Coastguard Worker    <DisplayString>{__cc}</DisplayString>
428*6777b538SAndroid Build Coastguard Worker    <Expand>
429*6777b538SAndroid Build Coastguard Worker      <ExpandedItem>__cc</ExpandedItem>
430*6777b538SAndroid Build Coastguard Worker    </Expand>
431*6777b538SAndroid Build Coastguard Worker  </Type>
432*6777b538SAndroid Build Coastguard Worker
433*6777b538SAndroid Build Coastguard Worker  <Type Name="std::__Cr::vector&lt;*&gt;">
434*6777b538SAndroid Build Coastguard Worker    <Intrinsic Name="size" Expression="__end_ - __begin_" />
435*6777b538SAndroid Build Coastguard Worker    <DisplayString>{{ size={size()} }}</DisplayString>
436*6777b538SAndroid Build Coastguard Worker    <Expand>
437*6777b538SAndroid Build Coastguard Worker      <ArrayItems>
438*6777b538SAndroid Build Coastguard Worker        <Size>size()</Size>
439*6777b538SAndroid Build Coastguard Worker        <ValuePointer>__begin_</ValuePointer>
440*6777b538SAndroid Build Coastguard Worker      </ArrayItems>
441*6777b538SAndroid Build Coastguard Worker    </Expand>
442*6777b538SAndroid Build Coastguard Worker  </Type>
443*6777b538SAndroid Build Coastguard Worker</AutoVisualizer>
444