summaryrefslogtreecommitdiff
path: root/src/mbgl/gfx/index_vector.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/gfx/index_vector.hpp')
-rw-r--r--src/mbgl/gfx/index_vector.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/mbgl/gfx/index_vector.hpp b/src/mbgl/gfx/index_vector.hpp
new file mode 100644
index 0000000000..b477c29782
--- /dev/null
+++ b/src/mbgl/gfx/index_vector.hpp
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <mbgl/util/ignore.hpp>
+
+#include <vector>
+
+namespace mbgl {
+namespace gfx {
+
+template <class DrawMode>
+class IndexVector {
+public:
+ static constexpr std::size_t groupSize = DrawMode::bufferGroupSize;
+
+ template <class... Args>
+ void emplace_back(Args&&... args) {
+ static_assert(sizeof...(args) == groupSize, "wrong buffer element count");
+ util::ignore({ (v.emplace_back(std::forward<Args>(args)), 0)... });
+ }
+
+ std::size_t indexSize() const {
+ return v.size();
+ }
+
+ std::size_t byteSize() const {
+ return v.size() * sizeof(uint16_t);
+ }
+
+ bool empty() const {
+ return v.empty();
+ }
+
+ void clear() {
+ v.clear();
+ }
+
+ const uint16_t* data() const {
+ return v.data();
+ }
+
+ const std::vector<uint16_t>& vector() const {
+ return v;
+ }
+
+private:
+ std::vector<uint16_t> v;
+};
+
+} // namespace gfx
+} // namespace mbgl