The PDB Serialized Hash Table Format
====================================

.. contents::
   :local:

.. _hash_intro:

Introduction
============

One of the design goals of the PDB format is to provide accelerated access to
debug information, and for this reason there are several occasions where hash
tables are serialized and embedded directly to the file, rather than requiring
a consumer to read a list of values and reconstruct the hash table on the fly.

The serialization format supports hash tables of arbitrarily large size and
capacity, as well as value types and hash functions.  The only supported key
value type is a uint32.  The only requirement is that the producer and consumer
agree on the hash function.  As such, the hash function is not discussed
further in this document. It is assumed that for a particular instance of a PDB
file hash table, the appropriate hash function is being used.

On-Disk Format
==============

.. code-block:: none

  .--------------------.-- +0
  |        Size        |
  .--------------------.-- +4
  |      Capacity      |
  .--------------------.-- +8
  | Present Bit Vector |
  .--------------------.-- +N
  | Deleted Bit Vector |
  .--------------------.-- +M                  ─╮
  |        Key         |                        │
  .--------------------.-- +M+4                 │
  |       Value        |                        │
  .--------------------.-- +M+4+sizeof(Value)   │
           ...                                  ├─ |Capacity| Bucket entries
  .--------------------.                        │
  |        Key         |                        │
  .--------------------.                        │
  |       Value        |                        │
  .--------------------.                       ─╯

- **Size** - The number of values contained in the hash table.

- **Capacity** - The number of buckets in the hash table.  Producers should
  maintain a load factor of no greater than ``2/3*Capacity+1``.

- **Present Bit Vector** - A serialized bit vector which contains information
  about which buckets have valid values.  If the bucket has a value, the
  corresponding bit will be set, and if the bucket doesn't have a value (either
  because the bucket is empty or because the value is a tombstone value) the bit
  will be unset.

- **Deleted Bit Vector** - A serialized bit vector which contains information
  about which buckets have tombstone values.  If the entry in this bucket is
  deleted, the bit will be set, otherwise it will be unset.

- **Keys and Values** - A list of ``Capacity`` hash buckets, where the first
  entry is the key (always a uint32), and the second entry is the value.  The
  state of each bucket (valid, empty, deleted) can be determined by examining
  the present and deleted bit vectors.


.. _hash_bit_vectors:

Present and Deleted Bit Vectors
===============================

The bit vectors indicating the status of each bucket are serialized as follows:

.. code-block:: none

  .--------------------.-- +0
  |     Word Count     |
  .--------------------.-- +4
  |        Word_0      |        ─╮
  .--------------------.-- +8    │
  |        Word_1      |         │
  .--------------------.-- +12   ├─ |Word Count| values
           ...                   │
  .--------------------.         │
  |       Word_N       |         │
  .--------------------.        ─╯

The words, when viewed as a contiguous block of bytes, represent a bit vector
with the following layout:

.. code-block:: none

    .------------.         .------------.------------.
    |   Word_N   |   ...   |   Word_1   |   Word_0   |
    .------------.         .------------.------------.
    |            |         |            |            |
  +N*32      +(N-1)*32    +64          +32          +0

where the k'th bit of this bit vector represents the status of the k'th bucket
in the hash table.
