zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit c6e10aab9cc9f2041fe55910ab74037ac8ad4be4
parent 071c5966a0d5547ea8e533ae670e0d54d6b03dcf
Author: Johannes Lorenz <j.git@lorenz-ho.me>
Date:   Sun, 25 Oct 2020 19:14:36 +0100

MultiPseudoStack: add comments

Diffstat:
Msrc/Containers/MultiPseudoStack.h | 22++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/Containers/MultiPseudoStack.h b/src/Containers/MultiPseudoStack.h @@ -17,6 +17,7 @@ namespace zyn { //XXX rename this thing typedef struct QueueListItem qli_t; +//! Queue item for LockFreeQueue struct QueueListItem { QueueListItem(void); @@ -25,7 +26,7 @@ struct QueueListItem }; -//Many reader many writer +//! Many reader many writer queue of fixed size memory chunks class LockFreeQueue { qli_t *const data; @@ -34,7 +35,7 @@ class LockFreeQueue std::atomic<int32_t> next_r; std::atomic<int32_t> next_w; std::atomic<int32_t> avail; - public: +public: LockFreeQueue(qli_t *data_, int n); ~LockFreeQueue(void); qli_t *read(void); @@ -42,24 +43,29 @@ class LockFreeQueue }; -/* - * Many reader Many writer capiable queue +/** + * Many reader many writer capiable queue of fixed size memory chunks + * * - lock free * - allocation free (post initialization) */ class MultiQueue { - qli_t *pool; - LockFreeQueue m_free; - LockFreeQueue m_msgs; + qli_t *pool; //!< actual storage + LockFreeQueue m_free; //!< queue of unused items + LockFreeQueue m_msgs; //!< actual queue - public: +public: MultiQueue(void); ~MultiQueue(void); void dump(void); + //! return a fresh item, e.g. to write to qli_t *alloc(void) { return m_free.read(); } + //! free an item void free(qli_t *q) { m_free.write(q); } + //! write item into the queue void write(qli_t *q) { m_msgs.write(q); } + //! take an item from the queue, must be freed qli_t *read(void) { return m_msgs.read(); } };