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 can 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.
