<?xml version="1.0" encoding="utf-8"?>

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

<Type Name="Noesis::ArrayRef&lt;*&gt;">
  <DisplayString>{{ size={mSize} }}</DisplayString>
  <Expand>
    <ArrayItems>
      <Size>mSize</Size>
      <ValuePointer>($T1*)mBegin</ValuePointer>
    </ArrayItems>
  </Expand>
</Type>
  
<Type Name="Noesis::BaseVector&lt;*&gt;">
  <DisplayString>{{ size={mSize} }}</DisplayString>
  <Expand>
    <Item Name="[capacity]">mCapacity</Item>
    <Item Name="[bytes]">sizeof(ValueType) * mCapacity</Item>
    <ArrayItems>
      <Size>mSize</Size>
      <ValuePointer>(ValueType*)mBegin</ValuePointer>
    </ArrayItems>
  </Expand>
</Type>

<Type Name="Noesis::BaseString">
  <DisplayString Condition="mIsSmall == 1">{ (const char*)(((FixedString&lt;24&gt;*)this)->mSmallString), na }</DisplayString>
  <DisplayString Condition="mIsSmall == 0">{ (const char*)(((FixedString&lt;24&gt;*)this)->mBegin), na }</DisplayString>
  <StringView Condition="mIsSmall == 1">((const char*)((FixedString&lt;24&gt;*)this)->mSmallString)</StringView>
  <StringView Condition="mIsSmall == 0">((const char*)((FixedString&lt;24&gt;*)this)->mBegin)</StringView>
  <Expand>
    <Item Name="[size]">mSize</Item>
    <Item Name="[capacity]">mCapacity</Item>
    <ArrayItems>
      <Size>mSize</Size>
      <ValuePointer Condition="mIsSmall == 1">((FixedString&lt;24&gt;*)this)->mSmallString</ValuePointer>
      <ValuePointer Condition="mIsSmall == 0">((FixedString&lt;24&gt;*)this)->mBegin</ValuePointer>
    </ArrayItems>
  </Expand>
</Type>

<Type Name="Noesis::HashMapImpl&lt;*&gt;">
  <DisplayString>{{ size={mNumEntries}, buckets={mNumBuckets} }}</DisplayString>
  <Expand>
    <Item Name="[size]">mNumEntries</Item>
    <Item Name="[buckets]">mNumBuckets</Item>
    <Item Name="[capacity]">mNumInlinedBuckets</Item>
    <Item Condition="mNumBuckets &gt; mNumInlinedBuckets" Name="[bytes]">sizeof($T1) * mNumBuckets</Item>
    <Item Condition="mNumBuckets &lt;= mNumInlinedBuckets" Name="[bytes]">sizeof($T1) * mNumInlinedBuckets</Item>
    <ArrayItems>
      <Size>mNumBuckets</Size>
      <ValuePointer>mBuckets</ValuePointer>
    </ArrayItems>
  </Expand>
</Type>

<Type Name="Noesis::BaseRefCounted" Inheritable="false">
  <DisplayString>{{ ref={mRefCount.val} }}</DisplayString>
</Type>

<Type Name="Noesis::BaseComponent" Inheritable="false">
  <DisplayString>{{ ref={mRefCount.val} }}</DisplayString>
</Type>

<Type Name="Noesis::Ptr&lt;*&gt;">
  <DisplayString Condition="mPtr != nullptr">{{ val={*mPtr} ref={mPtr->mRefCount.val} }}</DisplayString>
  <DisplayString Condition="mPtr == nullptr">{{ val={nullptr} }}</DisplayString>
  <Expand>
    <Item Condition="mPtr != nullptr" Name="[ref]">mPtr->mRefCount.val</Item>
    <Item Name="[ptr]">mPtr</Item>
  </Expand>
</Type>

<Type Name="Noesis::Boxed&lt;*&gt;">
  <DisplayString>{{ boxed={mValue} }}</DisplayString>
</Type>

<Type Name="Noesis::Symbol">
  <DisplayString>{{ {((const char**)Noesis.dll!gSymbols.mBegin)[mIndex],na} }}</DisplayString>
</Type>

<Type Name="Noesis::Symbol">
  <DisplayString>{{ {((const char**)Core.Kernel.dll!gSymbols.mBegin)[mIndex],na} }}</DisplayString>
</Type>

<Type Name="Noesis::Symbol">
  <DisplayString>{{ {((const char**)gSymbols.mBegin)[mIndex],na} }}</DisplayString>
</Type>

<Type Name="Noesis::Type">
  <DisplayString>{mName,na}</DisplayString>
</Type>

<Type Name="Noesis::Uri">
  <DisplayString Condition="mAssemblyLen == 0">{ mUri.mSmallString + mPathStart + mSlashLen, na }</DisplayString>
  <DisplayString Condition="mAssemblyLen != 0">{ (const char*)mUri.mSmallString + mPathStart + mAssemblyLen + 12, na }</DisplayString>
  <Expand>
    <Item Name="[scheme]" Condition="mSchemeLen == 0">""</Item>
    <Item Name="[scheme]" Condition="mSchemeLen != 0">mUri.mSmallString, [mSchemeLen]na</Item>
    <Item Name="[assembly]" Condition="mAssemblyLen == 0">""</Item>
    <Item Name="[assembly]" Condition="mAssemblyLen != 0">mUri.mSmallString + mPathStart + 1, [mAssemblyLen]na</Item>
    <Item Name="[path]" Condition="mAssemblyLen == 0">mUri.mSmallString + mPathStart + mSlashLen, na</Item>
    <Item Name="[path]" Condition="mAssemblyLen != 0">mUri.mSmallString + mPathStart + mAssemblyLen + 12, na</Item>
  </Expand>
</Type>

</AutoVisualizer>