1<?xml version="1.0" encoding="utf-8"?> 2<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 3 <Type Name="Base::array_view<*>"> 4 <DisplayString>{{size={size_}}}</DisplayString> 5 <Expand> 6 <Item Name="[size]">size_</Item> 7 <ArrayItems> 8 <Size>size_</Size> 9 <ValuePointer>begin_</ValuePointer> 10 </ArrayItems> 11 </Expand> 12 </Type> 13 <Type Name="Base::vector<*>"> 14 <DisplayString>{{size={size_}}}</DisplayString> 15 <Expand> 16 <Item Name="[size]">size_</Item> 17 <Item Name="[allocator]">allocator_</Item> 18 <Item Name="[capacity]">capacity_</Item> 19 <ArrayItems> 20 <Size>size_</Size> 21 <ValuePointer>($T1*)data_</ValuePointer> 22 </ArrayItems> 23 </Expand> 24 </Type> 25 <Type Name="Base::basic_string<*>"> 26 <DisplayString Condition="!data_.longString.isShort && (data_.longString.size == 0)">empty</DisplayString> 27 <DisplayString Condition="!data_.longString.isShort && (data_.longString.size > 0)">{($T1*)(data_.longString.begin),s}</DisplayString> 28 <DisplayString Condition="data_.longString.isShort && ((shortCapacity - data_.shortString.size) == 0)">empty</DisplayString> 29 <DisplayString Condition="data_.longString.isShort && ((shortCapacity - data_.shortString.size) > 0)">{data_.shortString.begin + 1,s}</DisplayString> 30 <StringView Condition="!data_.longString.isShort && (data_.longString.size > 0)">($T1*)(data_.longString.begin),s</StringView> 31 <StringView Condition="data_.longString.isShort && ((shortCapacity - data_.shortString.size) > 0)">data_.shortString.begin + 1,s</StringView> 32 <Expand> 33 <CustomListItems> 34 <If Condition="data_.longString.isShort"> 35 <Item Name="[capacity]">shortCapacity</Item> 36 <Item Name="[size]">shortCapacity - data_.shortString.size</Item> 37 <Item Name="[ptr]">($T1*)(data_.shortString.begin + 1)</Item> 38 </If> 39 <If Condition="!data_.longString.isShort"> 40 <Item Name="[capacity]">data_.longString.capacity</Item> 41 <Item Name="[size]">data_.longString.size</Item> 42 <Item Name="[ptr]">($T1*)data_.longString.begin</Item> 43 </If> 44 </CustomListItems> 45 </Expand> 46 </Type> 47 <Type Name="Base::basic_string_view<*>"> 48 <DisplayString Condition="size_==0">empty</DisplayString> 49 <DisplayString Condition="size_>0">{begin_,[size_]}</DisplayString> 50 <StringView Condition="size_>0">begin_,[size_]</StringView> 51 <Expand> 52 <ArrayItems> 53 <Size>size_</Size> 54 <ValuePointer>($T1*)begin_</ValuePointer> 55 </ArrayItems> 56 </Expand> 57 </Type> 58 <Type Name="Base::basic_fixed_string<*>"> 59 <DisplayString Condition="len_==0">empty</DisplayString> 60 <DisplayString Condition="len_>0">{data_,[len_]}</DisplayString> 61 <StringView Condition="len_>0">data_,[len_]</StringView> 62 <Expand> 63 <ArrayItems> 64 <Size>len_</Size> 65 <ValuePointer>($T1*)data_</ValuePointer> 66 </ArrayItems> 67 </Expand> 68 </Type> 69 70 <Type Name="Base::pair<*>"> 71 <DisplayString>{first}, {second}</DisplayString> 72 <Expand> 73 <Item Name="first">first</Item> 74 <Item Name="second">second</Item> 75 </Expand> 76 </Type> 77 78 <Type Name="Base::unordered_map_base<*>"> 79 <DisplayString Condition="size_==0">empty</DisplayString> 80 <DisplayString Condition="size_>0">{{size={size_}}}</DisplayString> 81 <Expand> 82 <CustomListItems MaxItemsPerView="5000" ExcludeView="Test"> 83 <Variable Name="index" InitialValue="0" /> 84 <Variable Name="buckets" InitialValue="buckets_.size_" /> 85 <Variable Name="pBucket" InitialValue="buckets_.data_" /> 86 <Variable Name="node" InitialValue="*buckets_.data_" /> 87 88 <Loop> 89 <If Condition="index >= buckets"> 90 <Break/> 91 </If> 92 <If Condition="pBucket[index] != nullptr"> 93 <Exec>node = *(pBucket + index)</Exec> 94 <Item Name="[{node->data.first}]">node->data.second</Item> 95 <Exec>node = node->next</Exec> 96 <Loop> 97 <If Condition="node != nullptr"> 98 <Item Name="[{node->data.first}]">node->data.second</Item> 99 <Exec>node = node->next</Exec> 100 </If> 101 <Else> 102 <Break/> 103 </Else> 104 </Loop> 105 </If> 106 <Exec>index+=1</Exec> 107 </Loop> 108 </CustomListItems> 109 </Expand> 110 </Type> 111 112 <Type Name="Base::unique_ptr<*>"> 113 <DisplayString Condition="ptr_ == nullptr">null</DisplayString> 114 <DisplayString>unique_ptr {*ptr_}</DisplayString> 115 <Expand> 116 <ExpandedItem>ptr_</ExpandedItem> 117 </Expand> 118 </Type> 119 <Type Name="Base::PropertyData"> 120 <DisplayString>{{properties={props_.size_}}}</DisplayString> 121 122 <Expand> 123 <CustomListItems> 124 <Variable Name="i" InitialValue="0"/> 125 <Variable Name="ptr" InitialValue="0ull"/> 126 <Variable Name="hash" InitialValue="0ull"/> 127 <!--<Variable Name="name" InitialValue="(const string_view*)nullptr"/>--> 128 <Variable Name="name" InitialValue="(const char*)nullptr"/> 129 <Size>props_.size_</Size> 130 <Exec>i=0</Exec> 131 <Exec>ptr=0</Exec> 132 <Exec>name=0</Exec> 133 <Loop> 134 <!--<Item Name="{props_[i].name,na}">props_[i].type.name</Item>--> 135 <Exec>ptr=(((uintptr_t)data_)+props_[i].offset)</Exec> 136 137 <!--<Exec>name=&props_[i].name</Exec>--> 138 <Exec>name=props_[i].name.begin_</Exec> 139 <Exec>hash=props_[i].type.compareHash</Exec> 140 <!-- can compare by name, like this. but this is unsafe since it misses the array... --> 141 <!--<Item Name="{name,na}" Condition="strcmp("uint32_t",props_[i].type.name.begin_)==0">*(uint32_t*)ptr</Item>--> 142 143 <!-- or hash like this --> 144 <Item Name="{name,na}" Condition="hash==0xa00a62a942b20165">*(float*)ptr</Item> 145 <Item Name="{name,na}" Condition="hash==0xd03d8582534ea008">*(uint8_t*)ptr</Item> 146 <Item Name="{name,na}" Condition="hash==0x32882d3b22f6b347">*(uint32_t*)ptr</Item> 147 <Item Name="{name,na}" Condition="hash==0x40eb7764c80bc470">*(uint64_t*)ptr</Item> 148 <Item Name="{name,na}" Condition="hash==0xcd2fd49bc6b014bd">*(bool*)ptr</Item> 149 <Item Name="{name,na}" Condition="hash==0xec1e7e12ad89ac3a">*(Base::IRenderDataStoreManager*)ptr</Item> 150 <Item Name="{name,na}" Condition="hash==0x757a4c2248c0b9da">*(Base::Entity*)ptr</Item> 151 <Item Name="{name,na}" Condition="hash==0x21e15240cce014d3">*(Base::GpuResourceHandle*)ptr</Item> 152 <Item Name="{name,na}" Condition="hash==0x91598cb8b6464ec3">*(Base::ResourceHandle*)ptr</Item> 153 <Item Name="{name,na}" Condition="hash==0xd30ef5cbeb1c566f">(char*)ptr,s</Item> 154 <Item Name="{name,na}" Condition="hash==0x5d863d348adb6e38">*(Base::Math::Vec3*)ptr</Item> 155 <Item Name="{name,na}" Condition="hash==0xbd2a98c671ac6319">*(Base::Math::Mat4X4*)ptr</Item> 156 <Item Name="{name,na}" Condition="hash==0x04265e5df5375480">*(Base::Math::Quat*)ptr</Item> 157 158 <!-- array types --> 159 <Item Name="{name,na}" Condition="hash==0x873dfbbafdddfeb7">(float*)ptr,[props_[i].count]</Item> 160 <Item Name="{name,na}" Condition="hash==0x8619d3da2a6707a5">(uint32_t*)ptr,[props_[i].count]</Item> 161 <Item Name="{name,na}" Condition="hash==0xe20c7b9b9145ccfc">(Base::Entity*)ptr,[props_[i].count]</Item> 162 <Item Name="{name,na}" Condition="hash==0x5e8a333040c05cb3">(Base::Math::Mat4X4*)ptr,[props_[i].count]</Item> 163 <Item Name="{name,na}" Condition="hash==0xe03a172042638626">(Base::Math::Vec3*)ptr,[props_[i].count]</Item> 164 165 <!-- complex types --> 166 <Item Name="{name,na}" Condition="hash==0x5bfe86140e100937">*(Base::vector<Base::basic_string<char> >*)ptr</Item> 167 <Item Name="{name,na}" Condition="hash==0xccfcf78fcb6a2dc2">*(Base::vector<float>*)ptr</Item> 168 <Exec>i++</Exec> 169 </Loop> 170 </CustomListItems> 171 <Item Name="[owner]">owner_</Item> 172 <Item Name="[size of data]">size_</Item> 173 <Item Name="[raw data]">data_</Item> 174 <Item Condition="dataHandle_!=nullptr" Name="[dataHandle]">dataHandle_</Item> 175 <Item Condition="dataW_!=data_" Name="[raw data]">dataW_</Item> 176 <Item Condition="dataHandleW_!=dataHandle_" Name="[dataHandleW]">dataHandleW_</Item> 177 </Expand> 178 </Type> 179</AutoVisualizer>