| Elektra 0.11.0

Functions
opmphm.c File Reference

The Order Preserving Minimal Perfect Hash Map. More...

`#include <kdbassert.h>`
`#include <kdbconfig.h>`
`#include <kdbhelper.h>`
`#include <kdblogger.h>`
`#include <kdbmacros.h>`
`#include <kdbopmphm.h>`
`#include <kdbprivate.h>`
`#include <kdbrand.h>`
`#include <string.h>`

## Functions
size_t | opmphmLookup (Opmphm *opmphm, size_t n, const void *name)
| Looks up a element in the OPMPHM.
int | opmphmAssignment (Opmphm *opmphm, OpmphmGraph *graph, size_t n, int defaultOrder)
| Assigns the vertices of the r-uniform r-partite hypergraph.
int | opmphmMapping (Opmphm *opmphm, OpmphmGraph *graph, OpmphmInit *init, size_t n)
| Maps the elements to edges in the r-uniform r-partite hypergraph.
double | opmphmMinC (uint8_t r)
| Provides the minimal `c` value for a given `r`
uint8_t | opmphmOptR (size_t n)
| Provides the optimal `r` value for a given `n`
double | opmphmOptC (size_t n)
| Provides the optimal `c` value for a given `n`
OpmphmGraph * | opmphmGraphNew (Opmphm *opmphm, uint8_t r, size_t n, double c)
| Allocates and initializes the OpmphmGraph.
void | opmphmGraphClear (const Opmphm *opmphm, OpmphmGraph *graph)
| Clears the OpmphmGraph.
void | opmphmGraphDel (OpmphmGraph *graph)
| Deletes the OpmphmGraph.
Opmphm * | opmphmNew (void)
| Allocates and initializes the OPMPHM.
int | opmphmCopy (Opmphm *dest, const Opmphm *source)
| Copies OPMPHM from source to destination.
int | opmphmIsBuild (const Opmphm *opmphm)
| OPMPHM is build.
void | opmphmDel (Opmphm *opmphm)
| Deletes the OPMPHM.
void | opmphmClear (Opmphm *opmphm)
| Clears the OPMPHM.
ELEKTRA_NO_SANITIZE_UNDEFINED ELEKTRA_NO_SANITIZE_INTEGER ELEKTRA_NO_SANITIZE_ADDRESS uint32_t | opmphmHashfunction (const void *key, size_t length, uint32_t initval)
| Hash function By Bob Jenkins, May 2006 http://burtleburtle.net/bob/c/lookup3.c Original name: hashlitte.

## Detailed Description

The Order Preserving Minimal Perfect Hash Map.

Copyright
  BSD License (see LICENSE.md or https://www.libelektra.org)

## Function Documentation

## ◆ opmphmAssignment()

int opmphmAssignment | ( | Opmphm * | opmphm,
|  | OpmphmGraph * | graph,
|  | size_t | n,
|  | int | defaultOrder
| ) |  |

Assigns the vertices of the r-uniform r-partite hypergraph.

Allocs the memory for the final OPMPHM `Opmphm->graph`. Uses the remove sequence `OpmphmGraph->removeSequence`, generated during cycle check, to assign each vertex. Either with `OpmphmEdge->order` or the default order, default is the order of `OpmphmInit->data`.

Parameters

  opmphm | the OPMPHM
  graph | the OpmphmGraph
  n | the number of elements
  defaultOrder | boolean flag

Return values

  0 | on success
  -1 | on memory error

## ◆ opmphmClear()

void opmphmClear | ( | Opmphm * | opmphm | ) |

Clears the OPMPHM.

The OPMPHM must be successfully created with `opmphmNew ()`. Clears and frees all internal memory of Opmphm, but not `Opmphm->hashFunctionSeeds` and the Opmphm instance.

Parameters

  opmphm | the OPMPHM

## ◆ opmphmCopy()

int opmphmCopy | ( | Opmphm * | dest,
|  | const Opmphm * | source
| ) |  |

Copies OPMPHM from source to destination.

Clears the dest and copies memory and values from source.

Parameters

  dest | the OPMPHM destination
  source | the OPMPHM source

Return values

  0 | on success
  -1 | on memory error

## ◆ opmphmDel()

void opmphmDel | ( | Opmphm * | opmphm | ) |

Deletes the OPMPHM.

Clears and frees all memory in Opmphm.

Parameters

  opmphm | the OPMPHM

## ◆ opmphmGraphClear()

void opmphmGraphClear | ( | const Opmphm * | opmphm,
|  | OpmphmGraph * | graph
| ) |  |

Clears the OpmphmGraph.

Sets all vertices to 0.

Parameters

  opmphm | the OPMPHM
  graph | the OpmphmGraph

## ◆ opmphmGraphDel()

void opmphmGraphDel | ( | OpmphmGraph * | graph | ) |

Deletes the OpmphmGraph.

Parameters

  graph | the OpmphmGraph

## ◆ opmphmGraphNew()

OpmphmGraph * opmphmGraphNew | ( | Opmphm * | opmphm,
|  | uint8_t | r,
|  | size_t | n,
|  | double | c
| ) |  |

Allocates and initializes the OpmphmGraph.

Graph functions.

The OpmphmGraph represents a r-uniform r-partite hypergraph. Lazy initializes the `opmphm->hashFunctionSeeds` with r. Calculates also the size of one partition in the r-uniform r-partite hypergraph and stores it in `opmphm->componentSize`. Allocates all memory for the OpmphmGraph.

Parameters

  opmphm | the OPMPHM
  r | the rUniPar
  n | the number of elements
  c | space influencing parameter

Return values

  OpmphmGraph | * success
  NULL | memory error

## ◆ opmphmIsBuild()

int opmphmIsBuild | ( | const Opmphm * | opmphm | ) |

OPMPHM is build.

Parameters

  opmphm | the OPMPHM

Return values

  0 | on false
  -1 | on true or NULL

## ◆ opmphmLookup()

size_t opmphmLookup | ( | Opmphm * | opmphm,
|  | size_t | n,
|  | const void * | name
| ) |  |

Looks up a element in the OPMPHM.

Lookup functions.

Parameters

  opmphm | the OPMPHM
  n | the number of elements
  name | the name of the element

Return values

  size_t | the order of the element.

## ◆ opmphmMapping()

int opmphmMapping | ( | Opmphm * | opmphm,
|  | OpmphmGraph * | graph,
|  | OpmphmInit * | init,
|  | size_t | n
| ) |  |

Maps the elements to edges in the r-uniform r-partite hypergraph.

Build functions.

Sets the seeds for the opmphmHashfunctions, `OpmphmInit->initSeed` will be changed. Inserts each element as edge in the r-uniform r-partite hypergraph and checks if the graph contains a cycle. If there are cycles the `graph` will be cleaned

Parameters

  opmphm | the OPMPHM
  graph | the OpmphmGraph
  init | the OpmphmInit
  n | the number of elements

Return values

  0 | on success
  -1 | mapping not possible

## ◆ opmphmMinC()

double opmphmMinC | ( | uint8_t | r | ) |

Provides the minimal `c` value for a given `r`

Functions providing `r` and `c`

This minimal values come from Fabiano Cupertino Botelho, Near-Optimal Space Perfect Hashing Algorithms, 2008.

Parameters

  r | the rUniPar

Return values

  c | the minimal c value

## ◆ opmphmNew()

Opmphm * opmphmNew | ( | void |  | ) |

Allocates and initializes the OPMPHM.

Basic functions.

Return values

  Opmphm | * success
  NULL | memory error

## ◆ opmphmOptC()

double opmphmOptC | ( | size_t | n | ) |

Provides the optimal `c` value for a given `n`

This is a heuristic, the return values follow from the mapping benchmark.

Parameters

  n | the number of elements to hash

Return values

  c | the optimal `c` value

## ◆ opmphmOptR()

uint8_t opmphmOptR | ( | size_t | n | ) |

Provides the optimal `r` value for a given `n`

This is a heuristic, the return values follow from the mapping benchmark.

Parameters

  n | the number of elements to hash

Return values

  r | the optimal rUniPar