зеркало из https://github.com/microsoft/STL.git
Adding mutex, ranges, functional, any and format visualizers (#2191)
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
This commit is contained in:
Родитель
0620026441
Коммит
332154b803
|
@ -49,78 +49,56 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
</Expand>
|
||||
</Type>
|
||||
|
||||
|
||||
<Type Name="std::tuple<>">
|
||||
<DisplayString IncludeView="noparens"></DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<DisplayString IncludeView="noparens;noparensasptr"></DisplayString>
|
||||
<DisplayString>({*this,view(noparens)})</DisplayString>
|
||||
<Expand/>
|
||||
</Type>
|
||||
|
||||
<!--
|
||||
Tuple uses a bit of a SFINAE-style technique in order to allow us to write less code.
|
||||
It uses Condition="(void)<expr>, true", along with Optional="true".
|
||||
This allows us to check if <expr> compiles, and if so, use that "branch".
|
||||
-->
|
||||
|
||||
<Type Name="std::tuple<*>">
|
||||
<DisplayString IncludeView="noparens" Optional="true" Condition="(void)((_Mybase *)this)->_Myfirst._Val, true">
|
||||
{_Myfirst._Val}, {*((_Mybase *) this),view(noparens)}
|
||||
</DisplayString>
|
||||
<DisplayString IncludeView="noparens">{_Myfirst._Val}</DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<DisplayString>({*this,view(noparens)})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">_Myfirst._Val</Item>
|
||||
<Item Name="[1]" Optional="true">((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[2]" Optional="true">((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[3]" Optional="true">((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[4]" Optional="true">((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Synthetic Name="[...]" Optional="true" Condition="(void)((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val, true">
|
||||
<DisplayString>Next five elements:</DisplayString>
|
||||
</Synthetic>
|
||||
<ExpandedItem Optional="true">*((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)</ExpandedItem>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::tuple<*,*>">
|
||||
<DisplayString IncludeView="noparens">{_Myfirst._Val}, {((_Mybase *) this)->_Myfirst._Val}</DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<Type Name="std::tuple<*>" IncludeView="asptr;noparensasptr">
|
||||
<DisplayString IncludeView="noparensasptr" Optional="true" Condition="(void)((_Mybase *)this)->_Myfirst._Val, true">
|
||||
{_Myfirst._Val}, {*((_Mybase *) this),view(noparensasptr)}
|
||||
</DisplayString>
|
||||
<DisplayString IncludeView="noparensasptr">{&_Myfirst._Val}</DisplayString>
|
||||
<DisplayString>({*this,view(noparensasptr)})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">_Myfirst._Val</Item>
|
||||
<Item Name="[1]">((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[0]">&_Myfirst._Val</Item>
|
||||
<Item Name="[1]">&((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[2]" Optional="true">&((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[3]" Optional="true">&((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[4]" Optional="true">&((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Synthetic Name="[...]" Optional="true" Condition="(void)((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val, true">
|
||||
<DisplayString>Next five elements:</DisplayString>
|
||||
</Synthetic>
|
||||
<ExpandedItem Optional="true">*((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this),view(asptr)</ExpandedItem>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::tuple<*,*,*>">
|
||||
<DisplayString IncludeView="noparens">{_Myfirst._Val}, {((_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase *) this)->_Myfirst._Val}</DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">_Myfirst._Val</Item>
|
||||
<Item Name="[1]">((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[2]">((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::tuple<*,*,*,*>">
|
||||
<DisplayString IncludeView="noparens">{_Myfirst._Val}, {((_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val}</DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">_Myfirst._Val</Item>
|
||||
<Item Name="[1]">((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[2]">((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[3]">((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::tuple<*,*,*,*,*>">
|
||||
<DisplayString IncludeView="noparens">{_Myfirst._Val}, {((_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val}</DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">_Myfirst._Val</Item>
|
||||
<Item Name="[1]">((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[2]">((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[3]">((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[4]">((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::tuple<*,*,*,*,*,*>">
|
||||
<DisplayString IncludeView="noparens">{_Myfirst._Val}, {((_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val}, {((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val}, {*((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this),view(noparens)}</DisplayString>
|
||||
<DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">_Myfirst._Val</Item>
|
||||
<Item Name="[1]">((_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[2]">((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[3]">((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Item Name="[4]">((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>
|
||||
<Synthetic Name="[...]"><DisplayString>Next five elements:</DisplayString></Synthetic>
|
||||
<ExpandedItem>*((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)</ExpandedItem>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
|
||||
<Type Name="std::nullopt_t">
|
||||
<DisplayString>nullopt</DisplayString>
|
||||
</Type>
|
||||
|
@ -216,37 +194,6 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
<DisplayString>monostate</DisplayString>
|
||||
</Type>
|
||||
|
||||
|
||||
<Type Name="std::any">
|
||||
<Intrinsic Name="has_value" Expression="_Storage._TypeData != 0"/>
|
||||
<Intrinsic Name="_Rep" Expression="_Storage._TypeData & _Rep_mask"/>
|
||||
<Intrinsic Name="type" Expression="(const type_info*)(_Storage._TypeData & ~_Rep_mask)"/>
|
||||
<Intrinsic Name="_Is_trivial" Expression="has_value() && _Rep() == 0"/>
|
||||
<Intrinsic Name="_Is_big" Expression="has_value() && _Rep() == 1"/>
|
||||
<Intrinsic Name="_Is_small" Expression="has_value() && _Rep() == 2"/>
|
||||
<DisplayString Condition="!has_value()">[empty]</DisplayString>
|
||||
<DisplayString Condition="_Is_trivial() || _Is_small()">[not empty (Small)]</DisplayString>
|
||||
<DisplayString Condition="_Is_big()">[not empty (Large)]</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="has_value">
|
||||
<DisplayString>{has_value()}</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="type" Condition="has_value()">
|
||||
<DisplayString>{type()}</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[representation]" Condition="_Is_trivial()">
|
||||
<DisplayString>(Small/Trivial Object)</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[representation]" Condition="_Is_small()">
|
||||
<DisplayString>(Small Object)</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[representation]" Condition="_Is_big()">
|
||||
<DisplayString>(Dynamic Allocation)</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
|
||||
<Type Name="std::unexpected<*>">
|
||||
<Intrinsic Name="unex" Expression="_Unexpected"/>
|
||||
<DisplayString>{unex()}</DisplayString>
|
||||
|
@ -1600,9 +1547,8 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
<Expand/>
|
||||
</Type>
|
||||
|
||||
|
||||
<!-- VC 2015 -->
|
||||
<Type Name="std::recursive_mutex">
|
||||
<Type Name="std::mutex">
|
||||
<AlternativeType Name="std::recursive_mutex"/>
|
||||
<DisplayString Condition="sizeof(void *) == 4u && *(int *)((char *)(&_Mtx_storage) + 44) == 0">unlocked</DisplayString>
|
||||
<DisplayString Condition="sizeof(void *) == 4u && *(int *)((char *)(&_Mtx_storage) + 44) != 0">locked</DisplayString>
|
||||
<DisplayString Condition="sizeof(void *) == 8u && *(int *)((char *)(&_Mtx_storage) + 76) == 0">unlocked</DisplayString>
|
||||
|
@ -1615,6 +1561,67 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::timed_mutex">
|
||||
<AlternativeType Name="std::recursive_timed_mutex"/>
|
||||
<DisplayString Condition="_My_locked == 0">unlocked</DisplayString>
|
||||
<DisplayString Condition="_My_locked != 0">locked</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[locking_thread_id]" Optional="true">_My_owner</Item>
|
||||
<Item Name="[ownership_levels]">_My_locked</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::lock_guard<*>">
|
||||
<DisplayString>{&_MyMutex}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="mutex">&_MyMutex</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::unique_lock<*>">
|
||||
<DisplayString Condition="_Pmtx == nullptr">empty</DisplayString>
|
||||
<DisplayString Condition="_Pmtx != nullptr && !_Owns">{*_Pmtx} - unowned</DisplayString>
|
||||
<DisplayString Condition="_Pmtx != nullptr && _Owns">{*_Pmtx} - owned</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="mutex">_Pmtx</Item>
|
||||
<Item Name="owned">_Owns</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::scoped_lock<>">
|
||||
<DisplayString>()</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::scoped_lock<*>">
|
||||
<DisplayString>({&_MyMutex})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[0]">&_MyMutex</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::scoped_lock<*,*>">
|
||||
<DisplayString>{_MyMutexes,view(asptr)}</DisplayString>
|
||||
<Expand>
|
||||
<ExpandedItem>_MyMutexes,view(asptr)</ExpandedItem>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::defer_lock_t">
|
||||
<DisplayString>std::defer_lock</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::try_to_lock_t">
|
||||
<DisplayString>std::try_to_lock</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::adopt_lock_t">
|
||||
<DisplayString>std::adopt_lock</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::once_flag">
|
||||
<DisplayString Condition="!_Opaque">incomplete</DisplayString>
|
||||
<DisplayString Condition="_Opaque">complete</DisplayString>
|
||||
</Type>
|
||||
|
||||
<!-- VC 2015 -->
|
||||
<Type Name="std::_Associated_state<*>">
|
||||
|
@ -1821,6 +1828,31 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::ranges::view_interface<*>">
|
||||
<DisplayString>{{ size={size()} }}</DisplayString>
|
||||
<Expand>
|
||||
<Item Optional="true" Name="empty">empty()</Item>
|
||||
<Item Optional="true" Name="front">front()</Item>
|
||||
<Item Optional="true" Name="back">back()</Item>
|
||||
<Item Optional="true" Name="data">data()</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::ranges::dangling">
|
||||
<DisplayString>dangling</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::ranges::common_view<*>">
|
||||
<DisplayString>{_Base}</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::ranges::basic_istream_view<*>">
|
||||
<DisplayString>{_Stream}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="value">_Val</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::ranges::_Ioterator<*>">
|
||||
<SmartPointer Usage="Minimal">&_Current,na</SmartPointer>
|
||||
<Expand>
|
||||
|
@ -1835,10 +1867,27 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::ranges::ref_view<*>">
|
||||
<DisplayString>{*_Range}</DisplayString>
|
||||
<Type Name="std::ranges::take_while_view<*>">
|
||||
<AlternativeType Name="std::ranges::drop_while_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::drop_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::join_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::transform_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::split_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::lazy_split_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::reverse_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::elements_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::take_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::ref_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::filter_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::owning_view<*>"/>
|
||||
<AlternativeType Name="std::ranges::chunk_by_view<*>"/>
|
||||
<DisplayString>{_Range}</DisplayString>
|
||||
<Expand>
|
||||
<ExpandedItem>*_Range</ExpandedItem>
|
||||
<Item Optional="true" Name="pred">_Pred</Item>
|
||||
<Item Optional="true" Name="next">_Next</Item>
|
||||
<Item Optional="true" Name="count">_Count</Item>
|
||||
<Item Optional="true" Name="function">_Fun</Item>
|
||||
<Item Optional="true" Name="pattern">_Pattern</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
|
@ -1890,4 +1939,212 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|||
<Expand/>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::basic_format_parse_context<*>">
|
||||
<DisplayString>{_Format_string}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Arguments">_Num_args</Item>
|
||||
<Item Name="Next arg id">_Next_arg_id</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- std::format_args -->
|
||||
<Type Name="std::basic_format_args<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>, char>>">
|
||||
<!-- decltype(std::make_format_args(...))-->
|
||||
<AlternativeType Name="std::_Format_arg_store<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<char>>, char>, *>" />
|
||||
<Intrinsic Name="storage" Expression="(char*)(&_Index_array[_Num_args])" />
|
||||
<DisplayString>{{ size={_Num_args} }}</DisplayString>
|
||||
<Expand>
|
||||
<IndexListItems>
|
||||
<Size>_Num_args</Size>
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 0">"None"</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Int_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 1">
|
||||
*(int*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_UInt_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 2">
|
||||
*(unsigned int*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Long_long_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 3">
|
||||
*(long long*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_ULong_long_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 4">
|
||||
*(unsigned long long*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Bool_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 5">
|
||||
*(bool*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Char_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 6">
|
||||
*(char*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Float_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 7">
|
||||
*(float*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Double_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 8">
|
||||
*(double*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Long_double_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 9">
|
||||
*(long double*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Pointer_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 10">
|
||||
*(void**)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_CString_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 11">
|
||||
*(char**)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_String_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 12">
|
||||
*(std::string_view*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Custom_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 13">
|
||||
*(void**)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
</IndexListItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- std::wformat_args -->
|
||||
<Type Name="std::basic_format_args<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<wchar_t>>, wchar_t>>">
|
||||
<!-- decltype(std::make_wformat_args(...))-->
|
||||
<AlternativeType Name="std::_Format_arg_store<std::basic_format_context<std::back_insert_iterator<std::_Fmt_buffer<wchar_t>>, wchar_t>, *>" />
|
||||
<Intrinsic Name="storage" Expression="(char*)(&_Index_array[_Num_args])" />
|
||||
<DisplayString>{{ size={_Num_args} }}</DisplayString>
|
||||
<Expand>
|
||||
<IndexListItems>
|
||||
<Size>_Num_args</Size>
|
||||
<!-- _Basic_format_arg_type::_Int_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 1">
|
||||
*(int*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_UInt_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 2">
|
||||
*(unsigned int*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Long_long_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 3">
|
||||
*(long long*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_ULong_long_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 4">
|
||||
*(unsigned long long*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Bool_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 5">
|
||||
*(bool*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Char_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 6">
|
||||
*(wchar_t*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Float_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 7">
|
||||
*(float*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Double_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 8">
|
||||
*(double*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Long_double_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 9">
|
||||
*(long double*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Pointer_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 10">
|
||||
*(void**)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_CString_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 11">
|
||||
*(wchar_t**)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_String_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 12">
|
||||
*(std::wstring_view*)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
<!-- _Basic_format_arg_type::_Custom_type -->
|
||||
<ValueNode Condition="_Index_array[$i]._Type_ == 13">
|
||||
*(void**)(&storage()[_Index_array[$i]._Index])
|
||||
</ValueNode>
|
||||
</IndexListItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::basic_format_arg<*>">
|
||||
<DisplayString Condition="_Active_state == 0">No state: {_No_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 1">Int state: {_Int_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 2">UInt state: {_UInt_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 3">Long long state: {_Long_long_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 4">ULong long state: {_ULong_long_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 5">Bool state: {_Bool_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 6">Char state: {_Char_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 7">Float state: {_Float_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 8">Double state: {_Double_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 9">Long double state: {_Long_double_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 10">Pointer state: {_Pointer_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 11">CString state: {_CString_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 12">String state: {_String_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state == 13">Custom state: {_Custom_state}</DisplayString>
|
||||
<DisplayString Condition="_Active_state >= 14">Invalid state: {_Active_state}</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::basic_format_context<*>">
|
||||
<DisplayString>{_Args}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Iterator">_OutputIt</Item>
|
||||
<Item Name="Loc">_Loc</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::exception">
|
||||
<DisplayString>{what()}</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::default_searcher<*>">
|
||||
<AlternativeType Name="std::boyer_moore_searcher<*>" />
|
||||
<AlternativeType Name="std::boyer_moore_horspool_searcher<*>" />
|
||||
<DisplayString>{_Data}</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name="std::any">
|
||||
<Intrinsic Name="has_value" Expression="_Storage._TypeData != 0"/>
|
||||
<Intrinsic Name="_Rep" Expression="_Storage._TypeData & _Rep_mask"/>
|
||||
<Intrinsic Name="type" Expression="(const type_info*)(_Storage._TypeData & ~_Rep_mask)"/>
|
||||
<Intrinsic Name="_Is_trivial" Expression="has_value() && _Rep() == 0"/>
|
||||
<Intrinsic Name="_Is_big" Expression="has_value() && _Rep() == 1"/>
|
||||
<Intrinsic Name="_Is_small" Expression="has_value() && _Rep() == 2"/>
|
||||
<DisplayString Condition="!has_value()">[empty]</DisplayString>
|
||||
<DisplayString Condition="_Is_trivial()">[not empty (trivial)]</DisplayString>
|
||||
<DisplayString Condition="_Is_small()">[not empty (small)]</DisplayString>
|
||||
<DisplayString Condition="_Is_big()">[not empty (large)]</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[castable_ptr]" Condition="_Is_trivial()">(void*)(&_Storage._TrivialData)</Item>
|
||||
<Item Name="[castable_ptr]" Condition="_Is_small()">(void*)(&_Storage._SmallStorage._Data)</Item>
|
||||
<Item Name="[castable_ptr]" Condition="_Is_big()">_Storage._BigStorage._Ptr</Item>
|
||||
<Synthetic Name="has_value">
|
||||
<DisplayString>{has_value()}</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="type" Condition="has_value()">
|
||||
<DisplayString>{type()}</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[representation]" Condition="_Is_trivial()">
|
||||
<DisplayString>(Small and Trivial Object)</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[representation]" Condition="_Is_small()">
|
||||
<DisplayString>(Small Object)</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[representation]" Condition="_Is_big()">
|
||||
<DisplayString>(Dynamic Allocation)</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
</AutoVisualizer>
|
||||
|
|
Загрузка…
Ссылка в новой задаче