Version | 1.18.9 |
---|
An API for constructing LV2 atoms.
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) |
struct LV2_Atom_Forge_Frame |
A stack frame used for keeping track of nested Atom containers.
Data Fields | ||
---|---|---|
struct LV2_Atom_Forge_Frame * | parent | |
LV2_Atom_Forge_Ref | ref |
struct LV2_Atom_Forge |
A "forge" for creating atoms by appending to a buffer.
Data Fields | ||
---|---|---|
uint8_t * | buf | |
uint32_t | offset | |
uint32_t | size | |
LV2_Atom_Forge_Sink | sink | |
LV2_Atom_Forge_Deref_Func | deref | |
LV2_Atom_Forge_Sink_Handle | handle | |
LV2_Atom_Forge_Frame * | stack | |
LV2_URID Blank | LV2_DEPRECATED | |
LV2_URID | Bool | |
LV2_URID | Chunk | |
LV2_URID | Double | |
LV2_URID | Float | |
LV2_URID | Int | |
LV2_URID | Long | |
LV2_URID | Literal | |
LV2_URID | Object | |
LV2_URID | Path | |
LV2_URID | Property | |
LV2_URID Resource | LV2_DEPRECATED | |
LV2_URID | Sequence | |
LV2_URID | String | |
LV2_URID | Tuple | |
LV2_URID | URI | |
LV2_URID | URID | |
LV2_URID | Vector |
typedef void* LV2_Atom_Forge_Sink_Handle |
Handle for LV2_Atom_Forge_Sink.
typedef intptr_t LV2_Atom_Forge_Ref |
A reference to a chunk of written output.
typedef LV2_Atom_Forge_Ref(* LV2_Atom_Forge_Sink) (LV2_Atom_Forge_Sink_Handle handle, const void *buf, uint32_t size) |
Sink function for writing output.
typedef LV2_Atom *(* LV2_Atom_Forge_Deref_Func) (LV2_Atom_Forge_Sink_Handle handle, LV2_Atom_Forge_Ref ref) |
Function for resolving a reference.
|
inlinestatic |
Set the output buffer where forge
will write atoms.
|
inlinestatic |
Initialise forge
.
URIs will be mapped using map
and stored, a reference to map
itself is not held.
|
inlinestatic |
Access the Atom pointed to by a reference.
|
inlinestatic |
Push a stack frame.
This is done automatically by container functions (which take a stack frame pointer), but may be called by the user to push the top level container when writing to an existing Atom.
|
inlinestatic |
Pop a stack frame.
This must be called when a container is finished.
|
inlinestatic |
Return true iff the top of the stack has the given type.
|
inlinestatic |
Return true iff type
is an atom:Object.
|
inlinestatic |
Return true iff type
is an atom:Object with a blank ID.
|
inlinestatic |
Set the sink function where forge
will write output.
The return value of forge functions is an LV2_Atom_Forge_Ref which is an integer type safe to use as a pointer but is otherwise opaque. The sink function must return a ref that can be dereferenced to access as least sizeof(LV2_Atom) bytes of the written data, so sizes can be updated. For ringbuffers, this should be possible as long as the size of the buffer is a multiple of sizeof(LV2_Atom), since atoms are always aligned.
Note that 0 is an invalid reference, so if you are using a buffer offset be sure to offset it such that 0 is never a valid reference. You will get confusing errors otherwise.
|
inlinestatic |
Write raw output.
This is used internally, but is also useful for writing atom types not explicitly supported by the forge API. Note the caller is responsible for ensuring the output is appropriately padded.
|
inlinestatic |
Pad output accordingly so next write is 64-bit aligned.
|
inlinestatic |
Write raw output, padding to 64-bits as necessary.
|
inlinestatic |
Write a null-terminated string body.
|
inlinestatic |
Write an atom:Atom header.
|
inlinestatic |
Write a primitive (fixed-size) atom.
|
inlinestatic |
Write an atom:Int.
|
inlinestatic |
Write an atom:Long.
|
inlinestatic |
Write an atom:Float.
|
inlinestatic |
Write an atom:Double.
|
inlinestatic |
Write an atom:Bool.
|
inlinestatic |
Write an atom:URID.
|
inlinestatic |
Write an atom compatible with atom:String.
Used internally.
|
inlinestatic |
Write an atom:String.
Note that str
need not be NULL terminated.
|
inlinestatic |
Write an atom:URI.
Note that uri
need not be NULL terminated. This does not map the URI, but writes the complete URI string. To write a mapped URI, use lv2_atom_forge_urid().
|
inlinestatic |
Write an atom:Path.
Note that path
need not be NULL terminated.
|
inlinestatic |
Write an atom:Literal.
|
inlinestatic |
Start an atom:Vector.
|
inlinestatic |
Write a complete atom:Vector.
|
inlinestatic |
Write the header of an atom:Tuple.
The passed frame will be initialised to represent this tuple. To complete the tuple, write a sequence of atoms, then pop the frame with lv2_atom_forge_pop().
For example:
|
inlinestatic |
Write the header of an atom:Object.
The passed frame will be initialised to represent this object. To complete the object, write a sequence of properties, then pop the frame with lv2_atom_forge_pop().
For example:
|
inlinestatic |
The same as lv2_atom_forge_object(), but for object:Resource.
This function is deprecated and should not be used in new code. Use lv2_atom_forge_object() directly instead.
|
inlinestatic |
The same as lv2_atom_forge_object(), but for object:Blank.
This function is deprecated and should not be used in new code. Use lv2_atom_forge_object() directly instead.
|
inlinestatic |
Write a property key in an Object, to be followed by the value.
See lv2_atom_forge_object() documentation for an example.
|
inlinestatic |
Write the header for a property body in an object, with context.
If you do not need the context, which is almost certainly the case, use the simpler lv2_atom_forge_key() instead.
|
inlinestatic |
Write the header for a Sequence.
|
inlinestatic |
Write the time stamp header of an Event (in a Sequence) in audio frames.
After this, call the appropriate forge method(s) to write the body. Note the returned reference is to an LV2_Event which is NOT an Atom.
|
inlinestatic |
Write the time stamp header of an Event (in a Sequence) in beats.
After this, call the appropriate forge method(s) to write the body. Note the returned reference is to an LV2_Event which is NOT an Atom.