# LV2

An open and extensible audio plugin standard

Version | 1.18.10

Data Structures | Typedefs | Functions
forge.h File Reference

## Detailed Description

An API for constructing LV2 atoms.

This file provides an API for constructing Atoms which makes it relatively simple to build nested atoms of arbitrary complexity without requiring dynamic memory allocation.

The API is based on successively appending the appropriate pieces to build a complete Atom. The size of containers is automatically updated. Functions that begin a container return (via their frame argument) a stack frame which must be popped when the container is finished.

All output is written to a user-provided buffer or sink function. This makes it possible to create atoms on the stack, on the heap, in LV2 port buffers, in a ringbuffer, or elsewhere, all using the same API.

This entire API is realtime safe if used with a buffer or a realtime safe sink, except lv2_atom_forge_init() which is only realtime safe if the URI map function is.

Note these functions are all static inline, do not take their address.

This header is non-normative, it is provided for convenience.

## Data Structures
struct | LV2_Atom_Forge_Frame
struct | LV2_Atom_Forge

## Typedefs
typedef void * | LV2_Atom_Forge_Sink_Handle
typedef intptr_t | LV2_Atom_Forge_Ref
typedef LV2_Atom_Forge_Ref(* | LV2_Atom_Forge_Sink) (LV2_Atom_Forge_Sink_Handle handle, const void *buf, uint32_t size)
typedef LV2_Atom *(* | LV2_Atom_Forge_Deref_Func) (LV2_Atom_Forge_Sink_Handle handle, LV2_Atom_Forge_Ref ref)

## Functions
static void | lv2_atom_forge_init (LV2_Atom_Forge *forge, LV2_URID_Map *map)
static LV2_Atom * | lv2_atom_forge_deref (LV2_Atom_Forge *forge, LV2_Atom_Forge_Ref ref)
Output Configuration
static void | lv2_atom_forge_set_buffer (LV2_Atom_Forge *forge, uint8_t *buf, size_t size)
static void | lv2_atom_forge_set_sink (LV2_Atom_Forge *forge, LV2_Atom_Forge_Sink sink, LV2_Atom_Forge_Deref_Func deref, LV2_Atom_Forge_Sink_Handle handle)
Object Stack
static LV2_Atom_Forge_Ref | lv2_atom_forge_push (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame, LV2_Atom_Forge_Ref ref)
static void | lv2_atom_forge_pop (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame)
static bool | lv2_atom_forge_top_is (LV2_Atom_Forge *forge, uint32_t type)
static bool | lv2_atom_forge_is_object_type (const LV2_Atom_Forge *forge, uint32_t type)
static bool | lv2_atom_forge_is_blank (const LV2_Atom_Forge *forge, uint32_t type, const LV2_Atom_Object_Body *body)
Low Level Output
static LV2_Atom_Forge_Ref | lv2_atom_forge_raw (LV2_Atom_Forge *forge, const void *data, uint32_t size)
static void | lv2_atom_forge_pad (LV2_Atom_Forge *forge, uint32_t written)
static LV2_Atom_Forge_Ref | lv2_atom_forge_write (LV2_Atom_Forge *forge, const void *data, uint32_t size)
static LV2_Atom_Forge_Ref | lv2_atom_forge_string_body (LV2_Atom_Forge *forge, const char *str, uint32_t len)
Atom Output
static LV2_Atom_Forge_Ref | lv2_atom_forge_atom (LV2_Atom_Forge *forge, uint32_t size, uint32_t type)
static LV2_Atom_Forge_Ref | lv2_atom_forge_primitive (LV2_Atom_Forge *forge, const LV2_Atom *a)
static LV2_Atom_Forge_Ref | lv2_atom_forge_int (LV2_Atom_Forge *forge, int32_t val)
static LV2_Atom_Forge_Ref | lv2_atom_forge_long (LV2_Atom_Forge *forge, int64_t val)
static LV2_Atom_Forge_Ref | lv2_atom_forge_float (LV2_Atom_Forge *forge, float val)
static LV2_Atom_Forge_Ref | lv2_atom_forge_double (LV2_Atom_Forge *forge, double val)
static LV2_Atom_Forge_Ref | lv2_atom_forge_bool (LV2_Atom_Forge *forge, bool val)
static LV2_Atom_Forge_Ref | lv2_atom_forge_urid (LV2_Atom_Forge *forge, LV2_URID id)
static LV2_Atom_Forge_Ref | lv2_atom_forge_typed_string (LV2_Atom_Forge *forge, uint32_t type, const char *str, uint32_t len)
static LV2_Atom_Forge_Ref | lv2_atom_forge_string (LV2_Atom_Forge *forge, const char *str, uint32_t len)
static LV2_Atom_Forge_Ref | lv2_atom_forge_uri (LV2_Atom_Forge *forge, const char *uri, uint32_t len)
static LV2_Atom_Forge_Ref | lv2_atom_forge_path (LV2_Atom_Forge *forge, const char *path, uint32_t len)
static LV2_Atom_Forge_Ref | lv2_atom_forge_literal (LV2_Atom_Forge *forge, const char *str, uint32_t len, uint32_t datatype, uint32_t lang)
static LV2_Atom_Forge_Ref | lv2_atom_forge_vector_head (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame, uint32_t child_size, uint32_t child_type)
static LV2_Atom_Forge_Ref | lv2_atom_forge_vector (LV2_Atom_Forge *forge, uint32_t child_size, uint32_t child_type, uint32_t n_elems, const void *elems)
static LV2_Atom_Forge_Ref | lv2_atom_forge_tuple (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame)
static LV2_Atom_Forge_Ref | lv2_atom_forge_object (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame, LV2_URID id, LV2_URID otype)
static LV2_DEPRECATED LV2_Atom_Forge_Ref | lv2_atom_forge_resource (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame, LV2_URID id, LV2_URID otype)
static LV2_DEPRECATED LV2_Atom_Forge_Ref | lv2_atom_forge_blank (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame, uint32_t id, LV2_URID otype)
static LV2_Atom_Forge_Ref | lv2_atom_forge_key (LV2_Atom_Forge *forge, LV2_URID key)
static LV2_Atom_Forge_Ref | lv2_atom_forge_property_head (LV2_Atom_Forge *forge, LV2_URID key, LV2_URID context)
static LV2_Atom_Forge_Ref | lv2_atom_forge_sequence_head (LV2_Atom_Forge *forge, LV2_Atom_Forge_Frame *frame, uint32_t unit)
static LV2_Atom_Forge_Ref | lv2_atom_forge_frame_time (LV2_Atom_Forge *forge, int64_t frames)
static LV2_Atom_Forge_Ref | lv2_atom_forge_beat_time (LV2_Atom_Forge *forge, double beats)