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 the backing region to its file (MappedRegion::sync()).

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

MappedRegion region
 Backing storage (shared mmap, or heap buffer).
table_ttable
 Typed view of region.base().

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 40 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 34 of file MMappedUUIDHashTable.cpp.

Here is the call graph for this function:

◆ ~MMappedUUIDHashTable()

MMappedUUIDHashTable::~MMappedUUIDHashTable ( )

Sync and unmap the file.

Definition at line 89 of file MMappedUUIDHashTable.cpp.

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 112 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 94 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 69 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 112 of file MMappedUUIDHashTable.h.

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 171 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 105 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 129 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 the backing region to its file (MappedRegion::sync()).

Definition at line 134 of file MMappedUUIDHashTable.cpp.

Member Data Documentation

◆ MAXIMUM_LOAD_FACTOR

double MMappedUUIDHashTable::MAXIMUM_LOAD_FACTOR =.5
staticconstexprprivate

Rehash when this fraction of slots is occupied.

Definition at line 102 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 133 of file MMappedUUIDHashTable.h.

◆ region

MappedRegion MMappedUUIDHashTable::region
private

Backing storage (shared mmap, or heap buffer).

Definition at line 96 of file MMappedUUIDHashTable.h.

◆ STARTING_LOG_SIZE

unsigned MMappedUUIDHashTable::STARTING_LOG_SIZE =16
staticconstexprprivate

Initial log2 capacity (65 536 slots).

Definition at line 100 of file MMappedUUIDHashTable.h.

◆ table

table_t* MMappedUUIDHashTable::table
private

Typed view of region.base().

Definition at line 97 of file MMappedUUIDHashTable.h.


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