ProvSQL C/C++ API
Adding support for provenance and uncertainty management to PostgreSQL databases
Loading...
Searching...
No Matches
MMappedUUIDHashTable Class Reference

Persistent open-addressing hash table mapping UUIDs to integers. More...

#include "MMappedUUIDHashTable.h"

Collaboration diagram for MMappedUUIDHashTable:

Classes

struct  value_t
 One slot in the hash table: a UUID key and its associated integer value. More...
struct  table_t
 On-disk layout of the hash table stored in the mmap file. More...

Public Member Functions

 MMappedUUIDHashTable (const char *filename, bool read_only, uint64_t magic)
 Open (or create) the mmap-backed hash table.
 ~MMappedUUIDHashTable ()
 Sync and unmap the file.
unsigned long operator[] (pg_uuid_t u) const
 Look up the integer index for UUID u.
std::pair< unsigned long, bool > add (pg_uuid_t u)
 Insert UUID u, assigning it the next available integer.
unsigned long nbElements () const
 Return the number of UUID→integer pairs currently stored.
void sync ()
 Flush dirty pages to the backing file with msync().

Static Public Attributes

static constexpr unsigned long NOTHING =static_cast<unsigned long>(-1)
 Sentinel returned by operator[]() when the UUID is not present.

Private Member Functions

unsigned long hash (pg_uuid_t u) const
 Compute the starting slot index for UUID u.
unsigned long find (pg_uuid_t u) const
 Find the slot index of u, or NOTHING if absent.
void mmap (size_t length, bool read_only)
 Map length bytes from the backing file (read-write or read-only).
void grow ()
 Double the table capacity and rehash all existing entries.
void set (pg_uuid_t u, unsigned long i)
 Store the mapping ui in the table.

Private Attributes

int fd
 File descriptor of the backing mmap file.
table_ttable
 Pointer to the memory-mapped table header.

Static Private Attributes

static constexpr unsigned STARTING_LOG_SIZE =16
 Initial log2 capacity (65 536 slots).
static constexpr double MAXIMUM_LOAD_FACTOR =.5
 Rehash when this fraction of slots is occupied.

Detailed Description

Persistent open-addressing hash table mapping UUIDs to integers.

Definition at line 38 of file MMappedUUIDHashTable.h.

Constructor & Destructor Documentation

◆ MMappedUUIDHashTable()

MMappedUUIDHashTable::MMappedUUIDHashTable ( const char * filename,
bool read_only,
uint64_t magic )

Open (or create) the mmap-backed hash table.

Parameters
filenamePath to the backing file (created if absent).
read_onlyIf true, map the file read-only (no new entries can be inserted).
magicExpected magic value for format validation.

Definition at line 35 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:

◆ ~MMappedUUIDHashTable()

MMappedUUIDHashTable::~MMappedUUIDHashTable ( )

Sync and unmap the file.

Definition at line 116 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:

Member Function Documentation

◆ add()

std::pair< unsigned long, bool > MMappedUUIDHashTable::add ( pg_uuid_t u)

Insert UUID u, assigning it the next available integer.

If u is already present the existing value is returned without modification.

Parameters
uUUID to insert.
Returns
A pair {value, inserted} where inserted is true if a new entry was created.

Definition at line 140 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:

◆ find()

unsigned long MMappedUUIDHashTable::find ( pg_uuid_t u) const
private

Find the slot index of u, or NOTHING if absent.

Parameters
uUUID to look up.
Returns
Slot index, or NOTHING if u is not in the table.

Definition at line 122 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ grow()

void MMappedUUIDHashTable::grow ( )
private

Double the table capacity and rehash all existing entries.

Definition at line 90 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hash()

unsigned long MMappedUUIDHashTable::hash ( pg_uuid_t u) const
inlineprivate

Compute the starting slot index for UUID u.

Reinterprets the first 8 bytes of u as a 64-bit integer and takes it modulo the current capacity.

Parameters
uUUID to hash.
Returns
Slot index in [0, capacity).

Definition at line 110 of file MMappedUUIDHashTable.h.

Here is the caller graph for this function:

◆ mmap()

void MMappedUUIDHashTable::mmap ( size_t length,
bool read_only )
private

Map length bytes from the backing file (read-write or read-only).

Parameters
lengthNumber of bytes to map.
read_onlyIf true, map read-only.

Definition at line 77 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nbElements()

unsigned long MMappedUUIDHashTable::nbElements ( ) const
inline

Return the number of UUID→integer pairs currently stored.

Returns
Element count.

Definition at line 175 of file MMappedUUIDHashTable.h.

◆ operator[]()

unsigned long MMappedUUIDHashTable::operator[] ( pg_uuid_t u) const

Look up the integer index for UUID u.

Parameters
uThe UUID to look up.
Returns
The associated integer, or NOTHING if u is absent.

Definition at line 133 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:

◆ set()

void MMappedUUIDHashTable::set ( pg_uuid_t u,
unsigned long i )
private

Store the mapping ui in the table.

Parameters
uUUID key to store.
iInteger value to associate with u.

Definition at line 157 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sync()

void MMappedUUIDHashTable::sync ( )

Flush dirty pages to the backing file with msync().

Definition at line 162 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ fd

int MMappedUUIDHashTable::fd
private

File descriptor of the backing mmap file.

Definition at line 94 of file MMappedUUIDHashTable.h.

◆ MAXIMUM_LOAD_FACTOR

double MMappedUUIDHashTable::MAXIMUM_LOAD_FACTOR =.5
staticconstexprprivate

Rehash when this fraction of slots is occupied.

Definition at line 100 of file MMappedUUIDHashTable.h.

◆ NOTHING

unsigned long MMappedUUIDHashTable::NOTHING =static_cast<unsigned long>(-1)
staticconstexpr

Sentinel returned by operator[]() when the UUID is not present.

Definition at line 137 of file MMappedUUIDHashTable.h.

◆ STARTING_LOG_SIZE

unsigned MMappedUUIDHashTable::STARTING_LOG_SIZE =16
staticconstexprprivate

Initial log2 capacity (65 536 slots).

Definition at line 98 of file MMappedUUIDHashTable.h.

◆ table

table_t* MMappedUUIDHashTable::table
private

Pointer to the memory-mapped table header.

Definition at line 95 of file MMappedUUIDHashTable.h.


The documentation for this class was generated from the following files: