|
|
@@ -26,7 +26,13 @@
|
|
|
</Expand>
|
|
|
</Type>
|
|
|
<Type Name="entt::basic_sparse_set<*>">
|
|
|
- <Intrinsic Name="cap" Expression="(traits_type::version_mask << traits_type::length)"/>
|
|
|
+ <Intrinsic Name="is_valid_position" Expression="sparse[page] && ((*((traits_type::entity_type *)&sparse[page][offset]) & traits_type::entity_mask) != traits_type::entity_mask)">
|
|
|
+ <Parameter Name="page" Type="traits_type::entity_type"/>
|
|
|
+ <Parameter Name="offset" Type="traits_type::entity_type"/>
|
|
|
+ </Intrinsic>
|
|
|
+ <Intrinsic Name="is_valid_entity" Expression="!traits_type::version_mask || (*((traits_type::entity_type *)&packed[pos]) < (traits_type::version_mask << traits_type::length))">
|
|
|
+ <Parameter Name="pos" Type="traits_type::entity_type"/>
|
|
|
+ </Intrinsic>
|
|
|
<DisplayString>{{ size={ packed.size() }, type={ info->alias,na } }}</DisplayString>
|
|
|
<Expand>
|
|
|
<Item Name="[capacity]">packed.capacity()</Item>
|
|
|
@@ -44,7 +50,7 @@
|
|
|
<Break Condition="pos == last"/>
|
|
|
<Exec>page = pos / traits_type::page_size</Exec>
|
|
|
<Exec>offset = pos & (traits_type::page_size - 1)</Exec>
|
|
|
- <If Condition="sparse[page] && (*((traits_type::entity_type *)&sparse[page][offset]) < cap())">
|
|
|
+ <If Condition="is_valid_position(page, offset)">
|
|
|
<Item Name="[{ pos }]">*((traits_type::entity_type *)&sparse[page][offset]) & traits_type::entity_mask</Item>
|
|
|
</If>
|
|
|
<Exec>++pos</Exec>
|
|
|
@@ -57,10 +63,9 @@
|
|
|
<Expand>
|
|
|
<CustomListItems>
|
|
|
<Variable Name="pos" InitialValue="0"/>
|
|
|
- <Variable Name="last" InitialValue="packed.size()"/>
|
|
|
<Loop>
|
|
|
- <Break Condition="pos == last"/>
|
|
|
- <If Condition="*((traits_type::entity_type *)&packed[pos]) < cap()">
|
|
|
+ <Break Condition="pos == packed.size()"/>
|
|
|
+ <If Condition="is_valid_entity(pos)">
|
|
|
<Item Name="[{ pos }]">packed[pos]</Item>
|
|
|
</If>
|
|
|
<Exec>++pos</Exec>
|
|
|
@@ -71,7 +76,9 @@
|
|
|
</Expand>
|
|
|
</Type>
|
|
|
<Type Name="entt::basic_storage<*>">
|
|
|
- <Intrinsic Name="cap" Expression="(base_type::traits_type::version_mask << base_type::traits_type::length)"/>
|
|
|
+ <Intrinsic Name="is_valid_entity" Expression="!base_type::traits_type::version_mask || (*((base_type::traits_type::entity_type *)&base_type::packed[pos]) < (base_type::traits_type::version_mask << base_type::traits_type::length))">
|
|
|
+ <Parameter Name="pos" Type="base_type::traits_type::entity_type"/>
|
|
|
+ </Intrinsic>
|
|
|
<DisplayString>{{ size={ base_type::packed.size() }, type={ base_type::info->alias,na } }}</DisplayString>
|
|
|
<Expand>
|
|
|
<Item Name="[capacity]" Optional="true">payload.capacity() * traits_type::page_size</Item>
|
|
|
@@ -81,10 +88,9 @@
|
|
|
<!-- having SFINAE-like techniques in natvis is priceless :) -->
|
|
|
<CustomListItems Condition="payload.size() != 0" Optional="true">
|
|
|
<Variable Name="pos" InitialValue="0" />
|
|
|
- <Variable Name="last" InitialValue="base_type::packed.size()"/>
|
|
|
<Loop>
|
|
|
- <Break Condition="pos == last"/>
|
|
|
- <If Condition="*((base_type::traits_type::entity_type *)&base_type::packed[pos]) < cap()">
|
|
|
+ <Break Condition="pos == base_type::packed.size()"/>
|
|
|
+ <If Condition="is_valid_entity(pos)">
|
|
|
<Item Name="[{ pos }:{ base_type::packed[pos] }]">payload[pos / traits_type::page_size][pos & (traits_type::page_size - 1)]</Item>
|
|
|
</If>
|
|
|
<Exec>++pos</Exec>
|