aboutsummaryrefslogtreecommitdiffstats
path: root/al/source.h
diff options
context:
space:
mode:
Diffstat (limited to 'al/source.h')
-rw-r--r--al/source.h53
1 files changed, 48 insertions, 5 deletions
diff --git a/al/source.h b/al/source.h
index c9892398..1aafafab 100644
--- a/al/source.h
+++ b/al/source.h
@@ -4,6 +4,7 @@
#include <array>
#include <atomic>
#include <cstddef>
+#include <iterator>
#include "AL/al.h"
#include "AL/alc.h"
@@ -21,16 +22,58 @@ struct ALeffectslot;
struct ALbufferlistitem {
- std::atomic<ALbufferlistitem*> next;
- ALsizei max_samples;
- ALsizei num_buffers;
- ALbuffer *buffers[];
+ using element_type = ALbuffer*;
+ using value_type = ALbuffer*;
+ using index_type = size_t;
+ using difference_type = ptrdiff_t;
+
+ using pointer = ALbuffer**;
+ using const_pointer = ALbuffer*const*;
+ using reference = ALbuffer*&;
+ using const_reference = ALbuffer*const&;
+
+ using iterator = pointer;
+ using const_iterator = const_pointer;
+ using reverse_iterator = std::reverse_iterator<iterator>;
+ using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
+
+ std::atomic<ALbufferlistitem*> mNext;
+ ALuint mMaxSamples;
+ ALuint mNumBuffers;
+ element_type mBuffers[];
static constexpr size_t Sizeof(size_t num_buffers) noexcept
{
- return maxz(offsetof(ALbufferlistitem, buffers) + sizeof(ALbuffer*)*num_buffers,
+ return maxz(offsetof(ALbufferlistitem, mBuffers) + sizeof(element_type)*num_buffers,
sizeof(ALbufferlistitem));
}
+
+ reference front() { return mBuffers[0]; }
+ const_reference front() const { return mBuffers[0]; }
+ reference back() { return mBuffers[mNumBuffers-1]; }
+ const_reference back() const { return mBuffers[mNumBuffers-1]; }
+ reference operator[](index_type idx) { return mBuffers[idx]; }
+ const_reference operator[](index_type idx) const { return mBuffers[idx]; }
+ pointer data() noexcept { return mBuffers; }
+ const_pointer data() const noexcept { return mBuffers; }
+
+ index_type size() const noexcept { return mNumBuffers; }
+ bool empty() const noexcept { return mNumBuffers == 0; }
+
+ iterator begin() noexcept { return mBuffers; }
+ iterator end() noexcept { return mBuffers+mNumBuffers; }
+ const_iterator begin() const noexcept { return mBuffers; }
+ const_iterator end() const noexcept { return mBuffers+mNumBuffers; }
+ const_iterator cbegin() const noexcept { return mBuffers; }
+ const_iterator cend() const noexcept { return mBuffers+mNumBuffers; }
+
+ reverse_iterator rbegin() noexcept { return reverse_iterator{end()}; }
+ reverse_iterator rend() noexcept { return reverse_iterator{begin()}; }
+ const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator{end()}; }
+ const_reverse_iterator rend() const noexcept { return const_reverse_iterator{begin()}; }
+ const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator{cend()}; }
+ const_reverse_iterator crend() const noexcept { return const_reverse_iterator{cbegin()}; }
};