bravo/bag

This module provides functions to work with Bags

Types

A bag table. Keys may occur multiple times per table, but objects cannot be copied verbatim.

pub opaque type Bag

Functions

pub fn delete(bag: Bag) -> Bool

Deletes a Bag.

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

pub fn insert(bag: Bag, objects: List(a)) -> Bool

Inserts a list of tuples into a Bag.

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 Bag’s size.

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

pub fn insert_obj(bag: Bag, objects: List(Object(a))) -> Bool

Inserts a list of Objects into a Bag. It is recommended to use insert instead when possible, as this uses that function under the hood.

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 Bag’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(bag: Bag, key: a) -> List(Object(Dynamic))

Gets a list of Objects from a Bag.

  • If the list isn’t empty, then at least one object was found. ETS tables do not store types, so you must decode a Dynamic inside the Object.
  • If the list is empty, then the Bag did not contain any Object with the specified key.
pub fn new(
  name: String,
  keypos: Int,
  access: Access,
) -> Result(Bag, Option(ErlangError))

Creates a new ETS table configured as a bag: keys may only occur multiple times per table, but objects cannot be copied verbatim.

name: An atom representing the name of the Bag. 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 Bag.
  • Protected: Any process can read the Bag. Only the owner process can write to it.
  • Private: Only the parent process can read or write to the Bag.

Returns a result of the created Bag, 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