diff options
Diffstat (limited to 'EASTL/doc/EASTL.natvis')
-rw-r--r-- | EASTL/doc/EASTL.natvis | 731 |
1 files changed, 731 insertions, 0 deletions
diff --git a/EASTL/doc/EASTL.natvis b/EASTL/doc/EASTL.natvis new file mode 100644 index 0000000..c3e94db --- /dev/null +++ b/EASTL/doc/EASTL.natvis @@ -0,0 +1,731 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + This is a Microsoft natvis file, which allows visualization of complex variables in the + Microsoft debugger starting with VS2012. It's a successor to the AutoExp.dat file format. + + This file needs to go into your C:\Users\<user>\Documents\Visual Studio 2011\Visualizers\ + folder. Microsoft documentation states that it should go into a 2012 folder, but testing + in June of 2013 suggests that it still needs to be the 2011 folder. + + You don't need to restart Visual Studio to use it, you just need to restart the debug + session. You can have multiple .natvis files and they will all be used. + + VS2017 natvis documentation: + https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects +--> + +<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> + +<Type Name="eastl::unique_ptr<*>"> + <DisplayString Condition="mPair.mFirst != nullptr">({(void*)mPair.mFirst} = {*mPair.mFirst})</DisplayString> + <DisplayString Condition="mPair.mFirst == nullptr">({nullptr})</DisplayString> + <Expand> + <Item Name="[pointer]">(void*)mPair.mFirst</Item> + <Item Name="[value]">*mPair.mFirst</Item> + </Expand> +</Type> + +<Type Name="eastl::shared_ptr<*>"> + <DisplayString Condition="mpValue != nullptr">({(void*)mpValue} = {*mpValue})</DisplayString> + <DisplayString Condition="mpValue == nullptr">({nullptr})</DisplayString> + <Expand> + <Item Name="[pointer]">(void*)mpValue</Item> + <Item Name="[value]">*mpValue</Item> + <Item Name="[reference count]">mpRefCount->mRefCount</Item> + <Item Name="[weak reference count]">mpRefCount->mWeakRefCount</Item> + </Expand> +</Type> + +<Type Name="eastl::weak_ptr<*>"> + <DisplayString>{((mpRefCount && mpRefCount->mRefCount) ? mpValue : nullptr)}</DisplayString> + <Expand> + <ExpandedItem>mpRefCount && mpRefCount->mRefCount ? mpValue : nullptr</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::array<*,*>"> + <DisplayString Condition="$T2 == 0">[{$T2}] {{}}</DisplayString> + <DisplayString Condition="$T2 == 1">[{$T2}] {{ {*mValue} }}</DisplayString> + <DisplayString Condition="$T2 == 2">[{$T2}] {{ {*mValue}, {*(mValue+1)} }}</DisplayString> + <DisplayString Condition="$T2 == 3">[{$T2}] {{ {*mValue}, {*(mValue+1)}, {*(mValue+2)} }}</DisplayString> + <DisplayString Condition="$T2 == 4">[{$T2}] {{ {*mValue}, {*(mValue+1)}, {*(mValue+2)}, {*(mValue+3)} }}</DisplayString> + <DisplayString Condition="$T2 == 5">[{$T2}] {{ {*mValue}, {*(mValue+1)}, {*(mValue+2)}, {*(mValue+3)}, {*(mValue+4)} }}</DisplayString> + <DisplayString Condition="$T2 == 6">[{$T2}] {{ {*mValue}, {*(mValue+1)}, {*(mValue+2)}, {*(mValue+3)}, {*(mValue+4)}, {*(mValue+5)} }}</DisplayString> + <DisplayString Condition="$T2 > 6">[{$T2}] {{ {*mValue}, {*(mValue+1)}, {*(mValue+2)}, {*(mValue+3)}, {*(mValue+4)}, {*(mValue+5)}, ... }}</DisplayString> + <Expand> + <Item Name="[size]">$T2</Item> + <ArrayItems> + <Size>$T2</Size> + <ValuePointer>mValue</ValuePointer> + </ArrayItems> + </Expand> +</Type> + +<Type Name="eastl::basic_string<*>"> + <DisplayString Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">"{mPair.mFirst.heap.mpBegin,sb}"</DisplayString> + <DisplayString Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">"{mPair.mFirst.sso.mData,sb}"</DisplayString> + <Expand> + <Item Name="[length]" Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">mPair.mFirst.heap.mnSize</Item> + <Item Name="[capacity]" Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">(mPair.mFirst.heap.mnCapacity & ~kHeapMask)</Item> + <Item Name="[value]" Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">mPair.mFirst.heap.mpBegin,sb</Item> + + <Item Name="[length]" Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">(SSOLayout::SSO_CAPACITY - mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize)</Item> + <Item Name="[capacity]" Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">SSOLayout::SSO_CAPACITY</Item> + <Item Name="[value]" Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">mPair.mFirst.sso.mData,sb</Item> + + <Item Name="[uses heap]">!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)</Item> + </Expand> +</Type> + + +<Type Name="eastl::basic_string<wchar_t,*>"> + <DisplayString Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">{mPair.mFirst.heap.mpBegin,su}</DisplayString> + <DisplayString Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">{mPair.mFirst.sso.mData,su}</DisplayString> + <Expand> + <Item Name="[length]" Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">mPair.mFirst.heap.mnSize</Item> + <Item Name="[capacity]" Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">(mPair.mFirst.heap.mnCapacity & ~kHeapMask)</Item> + <Item Name="[value]" Condition="!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">mPair.mFirst.heap.mpBegin,su</Item> + + <Item Name="[length]" Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">(SSOLayout::SSO_CAPACITY - mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize)</Item> + <Item Name="[capacity]" Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">SSOLayout::SSO_CAPACITY</Item> + <Item Name="[value]" Condition="!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)">mPair.mFirst.sso.mData,su</Item> + + <Item Name="[uses heap]">!!(mPair.mFirst.sso.mRemainingSizeField.mnRemainingSize & kSSOMask)</Item> + </Expand> +</Type> + +<Type Name="eastl::pair<*>"> + <DisplayString>({first}, {second})</DisplayString> + <Expand> + <Item Name="first">first</Item> + <Item Name="second">second</Item> + </Expand> +</Type> + +<Type Name="eastl::span<*>"> + <DisplayString Condition="mnSize == 0">[{mnSize}] {{}}</DisplayString> + <DisplayString Condition="mnSize == 1">[{mnSize}] {{ {*mpData} }}</DisplayString> + <DisplayString Condition="mnSize == 2">[{mnSize}] {{ {*mpData}, {*(mpData+1)} }}</DisplayString> + <DisplayString Condition="mnSize == 3">[{mnSize}] {{ {*mpData}, {*(mpData+1)}, {*(mpData+2)} }}</DisplayString> + <DisplayString Condition="mnSize == 4">[{mnSize}] {{ {*mpData}, {*(mpData+1)}, {*(mpData+2)}, {*(mpData+3)} }}</DisplayString> + <DisplayString Condition="mnSize == 5">[{mnSize}] {{ {*mpData}, {*(mpData+1)}, {*(mpData+2)}, {*(mpData+3)}, {*(mpData+4)} }}</DisplayString> + <DisplayString Condition="mnSize == 6">[{mnSize}] {{ {*mpData}, {*(mpData+1)}, {*(mpData+2)}, {*(mpData+3)}, {*(mpData+4)}, {*(mpData+5)} }}</DisplayString> + <DisplayString Condition="mnSize > 6">[{mnSize}] {{ {*mpData}, {*(mpData+1)}, {*(mpData+2)}, {*(mpData+3)}, {*(mpData+4)}, {*(mpData+5)}, ... }}</DisplayString> + <Expand> + <Item Name="[size]">mnSize</Item> + <ArrayItems> + <Size>mnSize</Size> + <ValuePointer>mpData</ValuePointer> + </ArrayItems> + </Expand> +</Type> + +<Type Name="eastl::VectorBase<*>"> + <DisplayString Condition="mpEnd == mpBegin">[{mpEnd - mpBegin}] {{}}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin == 1">[{mpEnd - mpBegin}] {{ {*mpBegin} }}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin == 2">[{mpEnd - mpBegin}] {{ {*mpBegin}, {*(mpBegin+1)} }}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin == 3">[{mpEnd - mpBegin}] {{ {*mpBegin}, {*(mpBegin+1)}, {*(mpBegin+2)} }}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin == 4">[{mpEnd - mpBegin}] {{ {*mpBegin}, {*(mpBegin+1)}, {*(mpBegin+2)}, {*(mpBegin+3)} }}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin == 5">[{mpEnd - mpBegin}] {{ {*mpBegin}, {*(mpBegin+1)}, {*(mpBegin+2)}, {*(mpBegin+3)}, {*(mpBegin+4)} }}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin == 6">[{mpEnd - mpBegin}] {{ {*mpBegin}, {*(mpBegin+1)}, {*(mpBegin+2)}, {*(mpBegin+3)}, {*(mpBegin+4)}, {*(mpBegin+5)} }}</DisplayString> + <DisplayString Condition="mpEnd - mpBegin > 6">[{mpEnd - mpBegin}] {{ {*mpBegin}, {*(mpBegin+1)}, {*(mpBegin+2)}, {*(mpBegin+3)}, {*(mpBegin+4)}, {*(mpBegin+5)}, ... }}</DisplayString> + <Expand> + <Item Name="[size]">mpEnd - mpBegin</Item> + <Item Name="[capacity]">mCapacityAllocator.mFirst - mpBegin</Item> + <ArrayItems> + <Size>mpEnd - mpBegin</Size> + <ValuePointer>mpBegin</ValuePointer> + </ArrayItems> + </Expand> +</Type> + +<Type Name="eastl::DequeBase<*,*,*>"> + <DisplayString Condition="mItBegin.mpCurrent == mItEnd.mpCurrent"> + [0] {{}} + </DisplayString> + <DisplayString Condition="(mItEnd.mpCurrentArrayPtr - mItBegin.mpCurrentArrayPtr) * $T3 + (mItEnd.mpCurrent-mItEnd.mpBegin) - (mItBegin.mpCurrent-mItBegin.mpBegin) == 1"> + [1] {{ {*mItBegin.mpCurrent} }} + </DisplayString> + <DisplayString Condition="(mItEnd.mpCurrentArrayPtr - mItBegin.mpCurrentArrayPtr) * $T3 + (mItEnd.mpCurrent-mItEnd.mpBegin) - (mItBegin.mpCurrent-mItBegin.mpBegin) != 0"> + [{(mItEnd.mpCurrentArrayPtr - mItBegin.mpCurrentArrayPtr) * $T3 + (mItEnd.mpCurrent-mItEnd.mpBegin) - (mItBegin.mpCurrent-mItBegin.mpBegin)}] + {{ + {*mItBegin.mpCurrent}, + ... + }} + </DisplayString> + <Expand> + <Item Name="[size]">(mItEnd.mpCurrentArrayPtr - mItBegin.mpCurrentArrayPtr) * $T3 + (mItEnd.mpCurrent-mItEnd.mpBegin) - (mItBegin.mpCurrent-mItBegin.mpBegin)</Item> + <IndexListItems> + <Size>(mItEnd.mpCurrentArrayPtr - mItBegin.mpCurrentArrayPtr) * $T3 + (mItEnd.mpCurrent-mItEnd.mpBegin) - (mItBegin.mpCurrent-mItBegin.mpBegin)</Size> + <ValueNode>mItBegin.mpCurrentArrayPtr[(mItBegin.mpCurrent-mItBegin.mpBegin + $i) / $T3][(mItBegin.mpCurrent-mItBegin.mpBegin + $i) % $T3]</ValueNode> + </IndexListItems> + </Expand> +</Type> + +<Type Name="eastl::DequeIterator<*>"> + <DisplayString>{*mpCurrent}</DisplayString> + <Expand> + <Item Name="Value">*mpCurrent</Item> + <Item Name="Previous" Condition="mpCurrent == mpBegin">*(*(mpCurrentArrayPtr-1) + (mpEnd-mpBegin) - 1)</Item> + <Item Name="Previous" Condition="mpCurrent != mpBegin">*(mpCurrent-1)</Item> + <Item Name="Next" Condition="mpCurrent+1 == mpEnd">**(mpCurrentArrayPtr+1)</Item> + <Item Name="Next" Condition="mpCurrent+1 != mpEnd">*(mpCurrent+1)</Item> + <Item Name="Begin">mpCurrent == mpBegin</Item> + <Item Name="End">mpCurrent+1 == mpEnd</Item> + </Expand> +</Type> + +<Type Name="eastl::queue<*>"> + <AlternativeType Name="eastl::priority_queue<*>" /> + <AlternativeType Name="eastl::stack<*>" /> + <DisplayString>{c}</DisplayString> + <Expand> + <ExpandedItem>c</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::ListBase<*>"> + <DisplayString Condition="mNodeAllocator.mFirst.mpNext == &mNodeAllocator.mFirst"> + [0] {{}} + </DisplayString> + <DisplayString Condition="mNodeAllocator.mFirst.mpNext != &mNodeAllocator.mFirst && mNodeAllocator.mFirst.mpNext->mpNext == &mNodeAllocator.mFirst"> + [1] {{ {((eastl::ListNode<$T1>*)mNodeAllocator.mFirst.mpNext)->mValue} }} + </DisplayString> + <DisplayString Condition="mNodeAllocator.mFirst.mpNext != &mNodeAllocator.mFirst && mNodeAllocator.mFirst.mpNext->mpNext != &mNodeAllocator.mFirst && mNodeAllocator.mFirst.mpNext->mpNext->mpNext == &mNodeAllocator.mFirst"> + [2] + {{ + {((eastl::ListNode<$T1>*)mNodeAllocator.mFirst.mpNext)->mValue}, + {((eastl::ListNode<$T1>*)mNodeAllocator.mFirst.mpNext->mpNext)->mValue} + }} + </DisplayString> + <DisplayString Condition="mNodeAllocator.mFirst.mpNext != &mNodeAllocator.mFirst && mNodeAllocator.mFirst.mpNext->mpNext != &mNodeAllocator.mFirst && mNodeAllocator.mFirst.mpNext->mpNext->mpNext != &mNodeAllocator.mFirst"> + [?] + {{ + {((eastl::ListNode<$T1>*)mNodeAllocator.mFirst.mpNext)->mValue}, + {((eastl::ListNode<$T1>*)mNodeAllocator.mFirst.mpNext->mpNext)->mValue}, + ... + }} + </DisplayString> + <Expand> + <Synthetic Name="NOTE!"> + <DisplayString>Content of lists will repeat indefinitely. Keep that in mind!</DisplayString> + </Synthetic> + <LinkedListItems> + <HeadPointer>mNodeAllocator.mFirst.mpNext</HeadPointer> + <NextPointer>mpNext</NextPointer> + <ValueNode>((eastl::ListNode<$T1>*)this)->mValue</ValueNode> + </LinkedListItems> + </Expand> +</Type> + +<Type Name="eastl::ListNode<*>"> + <DisplayString>{mValue}</DisplayString> + <Expand> + <Item Name="Value">mValue</Item> + <Item Name="Next">*(eastl::ListNode<$T1>*)mpNext</Item> + <Item Name="Previous">*(eastl::ListNode<$T1>*)mpPrev</Item> + <Synthetic Name="NOTE!"> + <DisplayString>Content of lists will repeat indefinitely. Keep that in mind!</DisplayString> + </Synthetic> + <Synthetic Name="List"> + <DisplayString>The rest of the list follows:</DisplayString> + </Synthetic> + <LinkedListItems> + <HeadPointer>(eastl::ListNode<$T1>*)mpNext->mpNext</HeadPointer> + <NextPointer>(eastl::ListNode<$T1>*)mpNext</NextPointer> + <ValueNode>mValue</ValueNode> + </LinkedListItems> + </Expand> +</Type> + +<Type Name="eastl::ListIterator<*>"> + <DisplayString>{*mpNode}</DisplayString> + <Expand> + <ExpandedItem>mpNode</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::SListBase<*>"> + <DisplayString Condition="mNode.mpNext == 0"> + [0] {{}} + </DisplayString> + <DisplayString Condition="mNode.mpNext != 0 && mNode.mpNext->mpNext == 0"> + [1] + {{ + {((eastl::SListNode<$T1>*)mNode.mpNext)->mValue} + }} + </DisplayString> + <DisplayString Condition="mNode.mpNext != 0 && mNode.mpNext->mpNext != 0 && mNode.mpNext->mpNext->mpNext == 0"> + [2] + {{ + {((eastl::SListNode<$T1>*)mNode.mpNext)->mValue}, + {((eastl::SListNode<$T1>*)mNode.mpNext->mpNext)->mValue} + }} + </DisplayString> + <DisplayString Condition="mNode.mpNext != 0 && mNode.mpNext->mpNext != 0 && mNode.mpNext->mpNext->mpNext != 0"> + [?] + {{ + {((eastl::SListNode<$T1>*)mNode.mpNext)->mValue}, + {((eastl::SListNode<$T1>*)mNode.mpNext->mpNext)->mValue}, + ... + }} + </DisplayString> + <Expand> + <LinkedListItems> + <HeadPointer>mNode.mpNext</HeadPointer> + <NextPointer>mpNext</NextPointer> + <ValueNode>((eastl::SListNode<$T1>*)this)->mValue</ValueNode> + </LinkedListItems> + </Expand> +</Type> + +<Type Name="eastl::SListNode<*>"> + <DisplayString>{mValue}</DisplayString> + <Expand> + <Item Name="Value">mValue</Item> + <Item Name="Next">*(eastl::SListNode<$T1>*)mpNext</Item> + <Synthetic Name="List"> + <DisplayString>The rest of the list follows:</DisplayString> + </Synthetic> + <LinkedListItems> + <HeadPointer>mpNext == nullptr ? nullptr : (eastl::SListNode<$T1>*)mpNext->mpNext</HeadPointer> + <NextPointer>(eastl::SListNode<$T1>*)mpNext</NextPointer> + <ValueNode>mValue</ValueNode> + </LinkedListItems> + </Expand> +</Type> + +<Type Name="eastl::SListIterator<*>"> + <DisplayString>{*mpNode}</DisplayString> + <Expand> + <ExpandedItem>*mpNode</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::intrusive_list_base"> + <DisplayString Condition="mAnchor.mpNext == &mAnchor">[0] {{}}</DisplayString> + <DisplayString Condition="mAnchor.mpNext != &mAnchor && mAnchor.mpNext->mpNext == &mAnchor">[1] {{ {mAnchor.mpNext} }}</DisplayString> + <DisplayString Condition="mAnchor.mpNext != &mAnchor && mAnchor.mpNext->mpNext != &mAnchor">[?] {{ {mAnchor.mpNext}, ... }}</DisplayString> + <Expand> + <Synthetic Name="NOTE!"> + <DisplayString>Content of intrusive lists will repeat indefinitely. Keep that in mind!</DisplayString> + </Synthetic> + <LinkedListItems> + <HeadPointer>mAnchor.mpNext</HeadPointer> + <NextPointer>mpNext</NextPointer> + <ValueNode>*this</ValueNode> + </LinkedListItems> + </Expand> +</Type> + +<Type Name="eastl::intrusive_list_iterator<*>"> + <DisplayString>{*mpNode}</DisplayString> + <Expand> + <ExpandedItem>*mpNode</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::set<*>"> + <AlternativeType Name="eastl::multiset<*>" /> + <DisplayString Condition="mnSize == 0"> + [0] {{}} + </DisplayString> + <DisplayString Condition="mnSize == 1"> + [1] + {{ + {((eastl::rbtree_node<$T1>*)mAnchor.mpNodeLeft)->mValue} + }} + </DisplayString> + <DisplayString Condition="mnSize > 1"> + [{mnSize}] + {{ + {((eastl::rbtree_node<$T1>*)mAnchor.mpNodeLeft)->mValue}, + ... + }} + </DisplayString> + <Expand> + <Item Name="[size]">mnSize</Item> + <TreeItems> + <Size>mnSize</Size> + <HeadPointer>mAnchor.mpNodeParent</HeadPointer> + <LeftPointer>mpNodeLeft</LeftPointer> + <RightPointer>mpNodeRight</RightPointer> + <ValueNode>((eastl::rbtree_node<$T1>*)this)->mValue</ValueNode> + </TreeItems> + </Expand> +</Type> + +<Type Name="eastl::rbtree<*,*>"> + <DisplayString Condition="mnSize == 0"> + [0] {{}} + </DisplayString> + <DisplayString Condition="mnSize == 1"> + [1] + {{ + {((eastl::rbtree_node<$T2>*)mAnchor.mpNodeLeft)->mValue} + }} + </DisplayString> + <DisplayString Condition="mnSize > 1"> + [{mnSize}] + {{ + {((eastl::rbtree_node<$T2>*)mAnchor.mpNodeLeft)->mValue}, + ... + }} + </DisplayString> + <Expand> + <Item Name="[size]">mnSize</Item> + <TreeItems> + <Size>mnSize</Size> + <HeadPointer>mAnchor.mpNodeParent</HeadPointer> + <LeftPointer>mpNodeLeft</LeftPointer> + <RightPointer>mpNodeRight</RightPointer> + <ValueNode>((eastl::rbtree_node<$T2>*)this)->mValue</ValueNode> + </TreeItems> + </Expand> +</Type> + +<Type Name="eastl::rbtree_node<*>"> + <DisplayString>{mValue}</DisplayString> + <Expand> + <Item Name="Value">mValue</Item> + <Synthetic Name="NOTE!"> + <DisplayString>It is possible to expand parents that do not exist.</DisplayString> + </Synthetic> + <Item Name="Parent">*(eastl::rbtree_node<$T1>*)mpNodeParent</Item> + <Item Name="Left">*(eastl::rbtree_node<$T1>*)mpNodeLeft</Item> + <Item Name="Right">*(eastl::rbtree_node<$T1>*)mpNodeRight</Item> + </Expand> +</Type> + +<Type Name="eastl::rbtree_iterator<*>"> + <DisplayString>{*mpNode}</DisplayString> + <Expand> + <ExpandedItem>mpNode</ExpandedItem> + </Expand> +</Type> + + +<Type Name="eastl::hashtable<*>"> + <DisplayString Condition="mnElementCount == 0">[{mnElementCount}] {{}}</DisplayString> + <DisplayString Condition="mnElementCount != 0">[{mnElementCount}] {{ ... }}</DisplayString> + <Expand> + <ArrayItems IncludeView="detailed"> + <Size>mnBucketCount</Size> + <ValuePointer>mpBucketArray</ValuePointer> + </ArrayItems> + <CustomListItems ExcludeView="detailed"> + <Variable Name="bucketIndex" InitialValue="0"/> + <Variable Name="entry" InitialValue ="mpBucketArray[bucketIndex]"/> + <Loop> + <Item Condition="entry != nullptr">entry->mValue</Item> + <If Condition="entry != nullptr"> + <Exec>entry = entry->mpNext</Exec> + </If> + <If Condition="entry == nullptr"> + <Exec>bucketIndex++</Exec> + <Break Condition="bucketIndex == mnBucketCount"/> + <Exec>entry = mpBucketArray[bucketIndex]</Exec> + </If> + </Loop> + </CustomListItems> + </Expand> +</Type> + +<Type Name="eastl::hash_node<*>"> + <DisplayString Condition="this != 0 && mpNext != 0"> {mValue}, {*mpNext}</DisplayString> + <DisplayString Condition="this != 0 && mpNext == 0"> {mValue}</DisplayString> + <DisplayString Condition="this == 0"></DisplayString> + <Expand> + <LinkedListItems> + <HeadPointer>this</HeadPointer> + <NextPointer>mpNext</NextPointer> + <ValueNode>mValue</ValueNode> + </LinkedListItems> + </Expand> +</Type> + +<Type Name="eastl::hashtable_iterator_base<*>"> + <DisplayString>{mpNode->mValue}</DisplayString> + <Expand> + <ExpandedItem>mpNode->mValue</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::reverse_iterator<*>"> + <DisplayString>{*(mIterator-1)}</DisplayString> + <Expand> + <ExpandedItem>mIterator-1</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::bitset<*>"> + <DisplayString>{{count = {kSize}}}</DisplayString> + <Expand> + <Item Name="[count]">kSize</Item> + <CustomListItems> + <Variable Name="iWord" InitialValue="0" /> + <Variable Name="iBitInWord" InitialValue="0" /> + <Variable Name="bBitValue" InitialValue="false" /> + + <Size>kSize</Size> + + <Loop> + <Exec>bBitValue = ((mWord[iWord] >> iBitInWord) % 2) != 0 ? true : false</Exec> + <Item>bBitValue</Item> + <Exec>iBitInWord++</Exec> + <If Condition="iBitInWord == kBitsPerWord"> + <Exec>iWord++</Exec> + <Exec>iBitInWord = 0</Exec> + </If> + </Loop> + </CustomListItems> + </Expand> +</Type> + +<Type Name="eastl::ring_buffer<*,*,*>"> + <DisplayString>{c}</DisplayString> + <Expand> + <ExpandedItem>c</ExpandedItem> + </Expand> +</Type> + +<Type Name="eastl::basic_string_view<*>"> + <DisplayString>{mpBegin,[mnCount]}</DisplayString> + <StringView>mpBegin,[mnCount]</StringView> +</Type> + +<Type Name="eastl::compressed_pair_imp<*>"> + <DisplayString Condition="($T3) == 0" Optional="true">({mFirst}, {mSecond})</DisplayString> + <DisplayString Condition="($T3) == 1" Optional="true">({mSecond})</DisplayString> + <DisplayString Condition="($T3) == 2" Optional="true">({mFirst})</DisplayString> + <DisplayString Condition="($T3) == 3" Optional="true">(empty)</DisplayString> + <DisplayString Condition="($T3) == 4" Optional="true">(empty)</DisplayString> + <DisplayString Condition="($T3) == 5" Optional="true">({mFirst}, {mSecond})</DisplayString> +</Type> + +<Type Name="eastl::optional<*>"> + <Intrinsic Name="value" Expression="*($T1*)&val"/> + <DisplayString Condition="!engaged">nullopt</DisplayString> + <DisplayString Condition="engaged">{value()}</DisplayString> + <Expand> + <Item Condition="engaged" Name="value">value()</Item> + </Expand> +</Type> + +<Type Name="eastl::ratio<*>"> + <DisplayString>{$T1} to {$T2}}</DisplayString> +</Type> + + +<Type Name="eastl::chrono::duration<*,eastl::ratio<1,1000000000> >"> + <DisplayString>{mRep} nanoseconds</DisplayString> +</Type> + +<Type Name="eastl::chrono::duration<*,eastl::ratio<1,1000000> >"> + <DisplayString>{mRep} microseconds</DisplayString> +</Type> + +<Type Name="eastl::chrono::duration<*,eastl::ratio<1,1000> >"> + <DisplayString>{mRep} milliseconds</DisplayString> +</Type> + +<Type Name="eastl::chrono::duration<*,eastl::ratio<1,1> >"> + <DisplayString>{mRep} seconds</DisplayString> +</Type> + +<Type Name="eastl::chrono::duration<*,eastl::ratio<60,1> >"> + <DisplayString>{mRep} minutes</DisplayString> +</Type> + +<Type Name="eastl::chrono::duration<*,eastl::ratio<3600,1> >"> + <DisplayString>{mRep} hours</DisplayString> +</Type> + +<Type Name="eastl::chrono::duration<*,eastl::ratio<*,*> >"> + <DisplayString>{mRep} duration with ratio = [{$T2} : {$T3}] </DisplayString> +</Type> + + + +<Type Name="eastl::function<*>"> + <DisplayString Condition="mInvokeFuncPtr == nullptr">empty</DisplayString> + <DisplayString>{mInvokeFuncPtr}</DisplayString> +</Type> + + +<Type Name="eastl::reference_wrapper<*>"> + <DisplayString>{*val}</DisplayString> +</Type> + +<!-- + This implementation isn't ideal because it can't switch between showing inline value vs values stored in a heap allocation. + We are hitting the limit of natvis scripting that we can't workaround unless we change the implementation of eastl::any. +--> +<Type Name="eastl::any"> + <DisplayString Condition="m_handler == nullptr">empty</DisplayString> + <DisplayString Condition="m_handler != nullptr">{m_storage.external_storage}</DisplayString> +</Type> + + + +<Type Name="eastl::atomic_flag"> + <DisplayString>{mFlag.mAtomic}</DisplayString> +</Type> + +<Type Name="eastl::variant<*>"> + <Intrinsic Name="index" Expression="(int)mIndex"/> + <DisplayString Condition="index() == size_t(-1)">[valueless_by_exception]</DisplayString> + <DisplayString Condition="index() == 0" Optional="true">{{ index=0, value={($T1*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 1" Optional="true">{{ index=1, value={($T2*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 2" Optional="true">{{ index=2, value={($T3*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 3" Optional="true">{{ index=3, value={($T4*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 4" Optional="true">{{ index=4, value={($T5*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 5" Optional="true">{{ index=5, value={($T6*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 6" Optional="true">{{ index=6, value={($T7*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 7" Optional="true">{{ index=7, value={($T8*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 8" Optional="true">{{ index=8, value={($T9*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 9" Optional="true">{{ index=9, value={($T10*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 10" Optional="true">{{ index=10, value={($T11*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 11" Optional="true">{{ index=11, value={($T12*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 12" Optional="true">{{ index=12, value={($T13*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 13" Optional="true">{{ index=13, value={($T14*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 14" Optional="true">{{ index=14, value={($T15*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 15" Optional="true">{{ index=15, value={($T16*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 16" Optional="true">{{ index=16, value={($T17*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 17" Optional="true">{{ index=17, value={($T18*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 18" Optional="true">{{ index=18, value={($T19*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 19" Optional="true">{{ index=19, value={($T20*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 20" Optional="true">{{ index=20, value={($T21*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 21" Optional="true">{{ index=21, value={($T22*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 22" Optional="true">{{ index=22, value={($T23*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 23" Optional="true">{{ index=23, value={($T24*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 24" Optional="true">{{ index=24, value={($T25*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 25" Optional="true">{{ index=25, value={($T26*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 26" Optional="true">{{ index=26, value={($T27*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 27" Optional="true">{{ index=27, value={($T28*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 28" Optional="true">{{ index=28, value={($T29*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 29" Optional="true">{{ index=29, value={($T30*)mStorage.mBuffer.mCharData}}</DisplayString> + <DisplayString Condition="index() == 30" Optional="true">{{ index=30, value={($T31*)mStorage.mBuffer.mCharData}}</DisplayString> + <Expand> + <Item Name="index">index()</Item> + <Item Name="[value]" Condition="index() == 0" Optional="true">($T1*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 1" Optional="true">($T2*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 2" Optional="true">($T3*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 3" Optional="true">($T4*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 4" Optional="true">($T5*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 5" Optional="true">($T6*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 6" Optional="true">($T7*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 7" Optional="true">($T8*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 8" Optional="true">($T9*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 9" Optional="true">($T10*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 10" Optional="true">($T11*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 11" Optional="true">($T12*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 12" Optional="true">($T13*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 13" Optional="true">($T14*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 14" Optional="true">($T15*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 15" Optional="true">($T16*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 16" Optional="true">($T17*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 17" Optional="true">($T18*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 18" Optional="true">($T19*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 19" Optional="true">($T20*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 20" Optional="true">($T21*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 21" Optional="true">($T22*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 22" Optional="true">($T23*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 23" Optional="true">($T24*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 24" Optional="true">($T25*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 25" Optional="true">($T26*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 26" Optional="true">($T27*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 27" Optional="true">($T28*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 28" Optional="true">($T29*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 29" Optional="true">($T30*)mStorage.mBuffer.mCharData</Item> + <Item Name="[value]" Condition="index() == 30" Optional="true">($T31*)mStorage.mBuffer.mCharData</Item> + </Expand> +</Type> + + +<Type Name="eastl::tuple<>"> + <DisplayString IncludeView="noparens"></DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand/> +</Type> + +<Type Name="eastl::tuple<*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + +<Type Name="eastl::tuple<*,*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + <Item Name="[1]">(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + +<Type Name="eastl::tuple<*,*,*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + <Item Name="[1]">(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue</Item> + <Item Name="[2]">(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + +<Type Name="eastl::tuple<*,*,*,*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + <Item Name="[1]">(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue</Item> + <Item Name="[2]">(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue</Item> + <Item Name="[3]">(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + +<Type Name="eastl::tuple<*,*,*,*,*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<4,$T5,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + <Item Name="[1]">(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue</Item> + <Item Name="[2]">(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue</Item> + <Item Name="[3]">(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue</Item> + <Item Name="[4]">(*((eastl::Internal::TupleLeaf<4,$T5,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + +<Type Name="eastl::tuple<*,*,*,*,*,*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<4,$T5,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<5,$T6,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + <Item Name="[1]">(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue</Item> + <Item Name="[2]">(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue</Item> + <Item Name="[3]">(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue</Item> + <Item Name="[4]">(*((eastl::Internal::TupleLeaf<4,$T5,0>*)&mImpl)).mValue</Item> + <Item Name="[5]">(*((eastl::Internal::TupleLeaf<5,$T6,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + +<Type Name="eastl::tuple<*,*,*,*,*,*,*>"> + <DisplayString IncludeView="noparens">{(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<4,$T5,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<5,$T6,0>*)&mImpl)).mValue}, {(*((eastl::Internal::TupleLeaf<6,$T7,0>*)&mImpl)).mValue}</DisplayString> + <DisplayString ExcludeView="noparens">({*this,view(noparens)})</DisplayString> + <Expand> + <Item Name="[0]">(*((eastl::Internal::TupleLeaf<0,$T1,0>*)&mImpl)).mValue</Item> + <Item Name="[1]">(*((eastl::Internal::TupleLeaf<1,$T2,0>*)&mImpl)).mValue</Item> + <Item Name="[2]">(*((eastl::Internal::TupleLeaf<2,$T3,0>*)&mImpl)).mValue</Item> + <Item Name="[3]">(*((eastl::Internal::TupleLeaf<3,$T4,0>*)&mImpl)).mValue</Item> + <Item Name="[4]">(*((eastl::Internal::TupleLeaf<4,$T5,0>*)&mImpl)).mValue</Item> + <Item Name="[5]">(*((eastl::Internal::TupleLeaf<5,$T6,0>*)&mImpl)).mValue</Item> + <Item Name="[6]">(*((eastl::Internal::TupleLeaf<6,$T7,0>*)&mImpl)).mValue</Item> + </Expand> +</Type> + + +</AutoVisualizer> |