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