bravo/dbag

This module provides functions to work with DBags

Types

A duplicate bag etc. Keys may occur multiple times per table, and verbatim copies of an object can be stored.

pub opaque type DBag(t)

Functions

pub fn delete(dbag: DBag(a)) -> Bool

Deletes a DBag.

Table lifetime is static, and memory is only freed when the owner process is killed! Don’t forget to call this function!

pub fn delete_all_objects(dbag: DBag(a)) -> Nil

Deletes all objects in the DBag. This is atomic and isolated.

pub fn delete_key(dbag: DBag(a), key: b) -> Nil

Deletes all objects addressed by key, if any exist. If nothing does, this does nothing.

pub fn delete_object(dbag: DBag(a), object: a) -> Nil

Deletes a specific object in the DBag. Other objects with the same key are unaffected.

If there are multiple of the same object, then they will all be deleted.

pub fn insert(dbag: DBag(a), objects: List(a)) -> Bool

Inserts a list of tuples into a DBag.

Returns a Bool representing if the inserting succeeded.

  • If True, all objects in the list were inserted.
  • If False, none of the objects in the list were inserted. This may occur if the size of the tuple is less than the DBag’s size.

If an object with the same key already exists, then the old object will be overwritten with the new one.

pub fn lookup(dbag: DBag(a), key: b) -> List(a)

Gets a list of objects from a DBag.

Returns an list containing the objects, if any match.

pub fn new(
  name: String,
  keypos: Int,
  access: Access,
) -> Result(DBag(a), Option(ErlangError))

Creates a new ETS table configured as a duplicate bag: keys may occur multiple times per table, and verbatim copies of an object can be stored.

name: An atom representing the name of the DBag. There may only be one ETS table associated with an atom. keypos: The index (1-indexed) that represents the key position of the object. This function fails if this is less than 1. access: Determines how visible the table is to other processes.

  • Public: Any process can read or write to the DBag.
  • Protected: Any process can read the DBag. Only the owner process can write to it.
  • Private: Only the parent process can read or write to the DBag.

Returns a result of the created DBag, which can be used by other functions in this module. If this function errors with None, then you likely put in an illegal keypos value. Otherwise, something went wrong in the FFI layer and an error occured in Erlang land.

Search Document