ets_multimap.h

Include dependency graph for ets_multimap.h:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "4" [label="atom.h" tooltip="atom.h"] "6" [label="atom_table.h" tooltip="atom_table.h"] "12" [label="erl_nif.h" tooltip="erl_nif.h"] "16" [label="ets.h" tooltip="ets.h"] "1" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets_multimap.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets_multimap.h" fillcolor="#BFBFBF"] "2" [label="globalcontext.h" tooltip="globalcontext.h"] "23" [label="intn.h" tooltip="intn.h"] "18" [label="list.h" tooltip="list.h"] "27" [label="mailbox.h" tooltip="mailbox.h"] "24" [label="memory.h" tooltip="memory.h"] "25" [label="refc_binary.h" tooltip="refc_binary.h"] "26" [label="resources.h" tooltip="resources.h"] "19" [label="smp.h" tooltip="smp.h"] "17" [label="synclist.h" tooltip="synclist.h"] "20" [label="term.h" tooltip="term.h"] "13" [label="term_typedef.h" tooltip="term_typedef.h"] "28" [label="timer_list.h" tooltip="timer_list.h"] "8" [label="utils.h" tooltip="utils.h"] "29" [label="valueshashtable.h" tooltip="valueshashtable.h"] "14" [label="assert.h" tooltip="assert.h"] "9" [label="inttypes.h" tooltip="inttypes.h"] "15" [label="limits.h" tooltip="limits.h"] "7" [label="stdbool.h" tooltip="stdbool.h"] "10" [label="stddef.h" tooltip="stddef.h"] "3" [label="stdint.h" tooltip="stdint.h"] "11" [label="stdio.h" tooltip="stdio.h"] "5" [label="stdlib.h" tooltip="stdlib.h"] "22" [label="string.h" tooltip="string.h"] "21" [label="sys/types.h" tooltip="sys/types.h"] "4" -> "3" [dir=forward tooltip="include"] "4" -> "5" [dir=forward tooltip="include"] "6" -> "7" [dir=forward tooltip="include"] "6" -> "4" [dir=forward tooltip="include"] "6" -> "8" [dir=forward tooltip="include"] "12" -> "13" [dir=forward tooltip="include"] "16" -> "7" [dir=forward tooltip="include"] "16" -> "17" [dir=forward tooltip="include"] "16" -> "20" [dir=forward tooltip="include"] "1" -> "2" [dir=forward tooltip="include"] "1" -> "20" [dir=forward tooltip="include"] "2" -> "3" [dir=forward tooltip="include"] "2" -> "4" [dir=forward tooltip="include"] "2" -> "6" [dir=forward tooltip="include"] "2" -> "12" [dir=forward tooltip="include"] "2" -> "16" [dir=forward tooltip="include"] "2" -> "18" [dir=forward tooltip="include"] "2" -> "27" [dir=forward tooltip="include"] "2" -> "19" [dir=forward tooltip="include"] "2" -> "17" [dir=forward tooltip="include"] "2" -> "20" [dir=forward tooltip="include"] "2" -> "28" [dir=forward tooltip="include"] "2" -> "29" [dir=forward tooltip="include"] "23" -> "7" [dir=forward tooltip="include"] "23" -> "22" [dir=forward tooltip="include"] "23" -> "8" [dir=forward tooltip="include"] "18" -> "7" [dir=forward tooltip="include"] "27" -> "7" [dir=forward tooltip="include"] "27" -> "18" [dir=forward tooltip="include"] "27" -> "13" [dir=forward tooltip="include"] "27" -> "8" [dir=forward tooltip="include"] "24" -> "3" [dir=forward tooltip="include"] "24" -> "5" [dir=forward tooltip="include"] "24" -> "12" [dir=forward tooltip="include"] "24" -> "13" [dir=forward tooltip="include"] "24" -> "8" [dir=forward tooltip="include"] "25" -> "7" [dir=forward tooltip="include"] "25" -> "5" [dir=forward tooltip="include"] "25" -> "18" [dir=forward tooltip="include"] "25" -> "26" [dir=forward tooltip="include"] "26" -> "5" [dir=forward tooltip="include"] "26" -> "12" [dir=forward tooltip="include"] "26" -> "18" [dir=forward tooltip="include"] "26" -> "27" [dir=forward tooltip="include"] "26" -> "24" [dir=forward tooltip="include"] "26" -> "17" [dir=forward tooltip="include"] "19" -> "7" [dir=forward tooltip="include"] "17" -> "11" [dir=forward tooltip="include"] "17" -> "18" [dir=forward tooltip="include"] "17" -> "19" [dir=forward tooltip="include"] "20" -> "21" [dir=forward tooltip="include"] "20" -> "7" [dir=forward tooltip="include"] "20" -> "3" [dir=forward tooltip="include"] "20" -> "11" [dir=forward tooltip="include"] "20" -> "5" [dir=forward tooltip="include"] "20" -> "22" [dir=forward tooltip="include"] "20" -> "4" [dir=forward tooltip="include"] "20" -> "23" [dir=forward tooltip="include"] "20" -> "24" [dir=forward tooltip="include"] "20" -> "25" [dir=forward tooltip="include"] "20" -> "26" [dir=forward tooltip="include"] "20" -> "8" [dir=forward tooltip="include"] "20" -> "13" [dir=forward tooltip="include"] "13" -> "14" [dir=forward tooltip="include"] "13" -> "15" [dir=forward tooltip="include"] "13" -> "9" [dir=forward tooltip="include"] "13" -> "3" [dir=forward tooltip="include"] "28" -> "7" [dir=forward tooltip="include"] "28" -> "3" [dir=forward tooltip="include"] "28" -> "18" [dir=forward tooltip="include"] "8" -> "9" [dir=forward tooltip="include"] "8" -> "7" [dir=forward tooltip="include"] "8" -> "10" [dir=forward tooltip="include"] "8" -> "11" [dir=forward tooltip="include"] "8" -> "5" [dir=forward tooltip="include"] "29" -> "10" [dir=forward tooltip="include"] "29" -> "3" [dir=forward tooltip="include"] }

This graph shows which files directly or indirectly include ets_multimap.h:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets.c"] "3" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets_multimap.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets_multimap.c"] "1" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets_multimap.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets_multimap.h" fillcolor="#BFBFBF"] "1" -> "2" [dir=back tooltip="include"] "1" -> "3" [dir=back tooltip="include"] }

Defines

ETS_MULTIMAP_NUM_BUCKETS 16

Typedefs

typedef struct EtsMultimap EtsMultimap
typedef struct EtsMultimapNode EtsMultimapNode
typedef struct EtsMultimapEntry EtsMultimapEntry

Enums

enum ets_multimap_type_t

Values:

enumerator EtsMultimapTypeSingle
enumerator EtsMultimapTypeSet
enumerator EtsMultimapTypeList

Functions

EtsMultimap *ets_multimap_new(ets_multimap_type_t type, size_t index)

Create a new multimap.

Parameters:
  • type – the multimap type

  • index – the index of the tuple element to use as key

Returns:

the created multimap, or NULL on error

void ets_multimap_delete(EtsMultimap *multimap, GlobalContext *global)

Delete the multimap and all its contents.

Parameters:
  • multimap – the multimap

  • global – the global context

ets_result_t ets_multimap_lookup(EtsMultimap *multimap, term key, term **tuples, size_t *count, GlobalContext *global)

Lookup tuples by key.

Note

Terms returned by this function come from the ETS heap and should be copied to the process heap if needed.

Note

The returned tuples are ordered in reverse insertion order (most recently added elements first).

Warning

The caller is responsible for freeing the memory pointed to by tuples using free(). When count is zero, memory is not allocated.

Parameters:
  • multimap – the multimap

  • key – the key to lookup

  • tuples[out] the found tuples (or NULL to only get the count)

  • count[out] the number of found tuples; must not be NULL

  • global – the global context

Returns:

EtsOk on success, otherwise an error status

ets_result_t ets_multimap_insert(EtsMultimap *multimap, term *tuples, size_t count, GlobalContext *global)

Insert one or more tuples into the multimap.

Note

Terms passed to this function will be copied to the ETS heap.

Parameters:
  • multimap – the multimap

  • tuples – the tuples to insert

  • count – the number of tuples to insert

Returns:

EtsOk on success, otherwise an error status

ets_result_t ets_multimap_remove(EtsMultimap *multimap, term key, GlobalContext *global)

Remove all tuples with the given key.

Parameters:
  • multimap – the multimap

  • key – the key to lookup

  • global – the global context

Returns:

EtsOk on success, otherwise an error status

ets_result_t ets_multimap_remove_tuple(EtsMultimap *multimap, term tuple, GlobalContext *global)

Remove a given tuple from the multimap.

Parameters:
  • multimap – the multimap

  • tuple – the tuple to remove

  • global – the global context

Returns:

EtsOk on success, otherwise an error status

struct EtsMultimap
#include <ets_multimap.h>

Collaboration diagram for EtsMultimap:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "1" [label="EtsMultimap" tooltip="EtsMultimap" fillcolor="#BFBFBF"] "3" [label="EtsMultimapEntry" tooltip="EtsMultimapEntry"] "2" [label="EtsMultimapNode" tooltip="EtsMultimapNode"] "4" [label="Heap" tooltip="Heap"] "5" [label="HeapFragment" tooltip="HeapFragment"] "1" -> "2" [dir=forward tooltip="usage"] "3" -> "3" [dir=forward tooltip="usage"] "3" -> "4" [dir=forward tooltip="usage"] "2" -> "2" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="usage"] "4" -> "5" [dir=forward tooltip="usage"] "5" -> "5" [dir=forward tooltip="usage"] }

Public Members

ets_multimap_type_t type
size_t key_index
struct EtsMultimapNode *buckets[16]
struct EtsMultimapNode
#include <ets_multimap.h>

Collaboration diagram for EtsMultimapNode:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="EtsMultimapEntry" tooltip="EtsMultimapEntry"] "1" [label="EtsMultimapNode" tooltip="EtsMultimapNode" fillcolor="#BFBFBF"] "3" [label="Heap" tooltip="Heap"] "4" [label="HeapFragment" tooltip="HeapFragment"] "2" -> "2" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="usage"] "1" -> "1" [dir=forward tooltip="usage"] "1" -> "2" [dir=forward tooltip="usage"] "3" -> "4" [dir=forward tooltip="usage"] "4" -> "4" [dir=forward tooltip="usage"] }

Public Members

struct EtsMultimapNode *next
struct EtsMultimapEntry *entries
struct EtsMultimapEntry
#include <ets_multimap.h>

Collaboration diagram for EtsMultimapEntry:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "1" [label="EtsMultimapEntry" tooltip="EtsMultimapEntry" fillcolor="#BFBFBF"] "2" [label="Heap" tooltip="Heap"] "3" [label="HeapFragment" tooltip="HeapFragment"] "1" -> "1" [dir=forward tooltip="usage"] "1" -> "2" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="usage"] "3" -> "3" [dir=forward tooltip="usage"] }

Public Members

struct EtsMultimapEntry *next
term tuple
Heap *heap