<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

    <Type Name = "string">
        <DisplayString Condition="text != 0">{text, [len] s} ({len})</DisplayString>
        <DisplayString Condition="text == 0">&lt;NULL&gt;</DisplayString>
        <StringView>text, [len] s</StringView>
    </Type>

    <Type Name = "string16">
        <DisplayString Condition="text != 0">{text, [len] su} ({len})</DisplayString>
        <DisplayString Condition="text == 0">&lt;NULL&gt;</DisplayString>
        <StringView>text, [len] su</StringView>
    </Type>

    <Type Name = "arena">
        <DisplayString>pos: {pos}, capacity: [{capacity} / {reserved}]</DisplayString>
        <Expand>
            <Item Name="Data">base, [pos] s</Item>
            <Item Name="Data (Extended)">base, [pos+100] s</Item>
        </Expand>
    </Type>

    <Type Name = "temp_arena">
        <DisplayString>start: {start_pos}, arena: {{{*arena}}}</DisplayString>
        <Expand>
            <Item Name="Data">(arena->base + start_pos), [arena->pos - start_pos] s</Item>
            <Item Name="Data (Extended)">(arena->base + start_pos), [arena->pos - start_pos + 100] s</Item>
            <Item Name="Size">arena->pos - start_pos</Item>
        </Expand>
    </Type>

    <Type Name = "bitbuf">
        <DisplayString>bits: [{cur_bit} / {data_nbits}], bytes: [{cur_bit / 8} / {data_nbits / 8}]</DisplayString>
        <Expand>
            <ArrayItems>
                <Size>(cur_bit + 7) / 8</Size>
                <ValuePointer>data, bb</ValuePointer>
            </ArrayItems>
        </Expand>
    </Type>

    <Type Name = "String">
        <DisplayString Condition="text != 0">{text, [len] s} ({len})</DisplayString>
        <DisplayString Condition="text == 0">&lt;NULL&gt;</DisplayString>
        <StringView>text, [len]</StringView>
    </Type>

    <Type Name = "Arena">
        <DisplayString>pos: {pos}, capacity: [{capacity} / {reserved}]</DisplayString>
        <Expand>
            <Item Name="Data">base, [pos] s</Item>
            <Item Name="Data (Extended)">base, [pos+100] s</Item>
        </Expand>
    </Type>

    <Type Name = "TempArena">
        <DisplayString>start: {start_pos}, arena: {{{*arena}}}</DisplayString>
        <Expand>
            <Item Name="Data">(arena->base + start_pos), [arena->pos - start_pos] s</Item>
            <Item Name="Data (Extended)">(arena->base + start_pos), [arena->pos - start_pos + 100] s</Item>
            <Item Name="Size">arena->pos - start_pos</Item>
        </Expand>
    </Type>

</AutoVisualizer>
