2 Copyright 2008-2012 David Robillard <http://drobilla.net>
4 Permission to use, copy, modify, and/or distribute this software for any
5 purpose with or without fee is hereby granted, provided that the above
6 copyright notice and this permission notice appear in all copies.
8 THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
28 Format of actual buffer.
32 An (old) ev:EventBuffer (LV2_Event_Buffer).
37 A (new) atom:Sequence (LV2_Atom_Sequence).
43 An abstract/opaque LV2 event buffer.
45 typedef struct LV2_Evbuf_Impl LV2_Evbuf;
48 An iterator over an LV2_Evbuf.
56 Allocate a new, empty event buffer.
57 The URID for atom:Sequence must be passed for atom_Sequence if type is
61 lv2_evbuf_new(uint32_t capacity, LV2_Evbuf_Type type, uint32_t atom_type);
64 Free an event buffer allocated with lv2_evbuf_new.
67 lv2_evbuf_free(LV2_Evbuf* evbuf);
70 Change the type of an existing event buffer. This will clear and reset the
71 buffer, it is not possible to change the type and preserve the buffer
72 contents since the formats differ. The URID for atom:Sequence must be
73 passed for atom_Sequence if type is LV2_EVBUF_ATOM.
76 lv2_evbuf_set_type(LV2_Evbuf* evbuf, LV2_Evbuf_Type type, uint32_t atom_type);
79 Clear and initialize an existing event buffer.
80 The contents of buf are ignored entirely and overwritten, except capacity
84 lv2_evbuf_reset(LV2_Evbuf* evbuf);
87 Return the total padded size of the events stored in the buffer.
90 lv2_evbuf_get_size(LV2_Evbuf* evbuf);
93 Return the actual buffer implementation.
94 The format of the buffer returned depends on the buffer type.
97 lv2_evbuf_get_buffer(LV2_Evbuf* evbuf);
100 Return an iterator to the start of @p buf.
103 lv2_evbuf_begin(LV2_Evbuf* evbuf);
106 Return an iterator to the end of @a buf.
109 lv2_evbuf_end(LV2_Evbuf* evbuf);
112 Check if @p iter is valid.
113 @return True if @p iter is valid, otherwise false (past end of buffer)
116 lv2_evbuf_is_valid(LV2_Evbuf_Iterator iter);
119 Advance @p iter forward one event.
120 @p iter must be valid.
121 @return True if @p iter is valid, otherwise false (reached end of buffer)
124 lv2_evbuf_next(LV2_Evbuf_Iterator iter);
127 Dereference an event iterator (i.e. get the event currently pointed to).
128 @p iter must be valid.
129 @p type Set to the type of the event.
130 @p size Set to the size of the event.
131 @p data Set to the contents of the event.
132 @return True on success.
135 lv2_evbuf_get(LV2_Evbuf_Iterator iter,
143 Write an event at @p iter.
144 The event (if any) pointed to by @p iter will be overwritten, and @p iter
145 incremented to point to the following event (i.e. several calls to this
146 function can be done in sequence without twiddling iter in-between).
147 @return True if event was written, otherwise false (buffer is full).
150 lv2_evbuf_write(LV2_Evbuf_Iterator* iter,
155 const uint8_t* data);
161 #endif /* LV2_EVBUF_H */