summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2024-01-27 11:32:16 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2024-01-27 11:32:16 +0000
commitd82541fcea40efadaef63fef5f4a76c3fea5defe (patch)
tree4fcc8e8f73208c6cff60db59d5093817f0af40c0
parentAdd text to framebuffer rendering test (diff)
downloadilt-d82541fcea40efadaef63fef5f4a76c3fea5defe.tar.bz2
ilt-d82541fcea40efadaef63fef5f4a76c3fea5defe.tar.xz
ilt-d82541fcea40efadaef63fef5f4a76c3fea5defe.zip
Support constructing a glContainer from a collection of the same type
-rw-r--r--lib/glContainer.h6
-rw-r--r--test/test-glContainer.cpp9
2 files changed, 15 insertions, 0 deletions
diff --git a/lib/glContainer.h b/lib/glContainer.h
index ce88916..2ccc1c2 100644
--- a/lib/glContainer.h
+++ b/lib/glContainer.h
@@ -38,6 +38,12 @@ public:
clear();
}
+ template<template<typename, typename...> typename C> explicit glContainer(const C<T> & src)
+ {
+ reserve(src.size());
+ std::copy(src.begin(), src.end(), std::back_inserter(*this));
+ }
+
DEFAULT_MOVE_NO_COPY(glContainer);
[[nodiscard]] iterator
diff --git a/test/test-glContainer.cpp b/test/test-glContainer.cpp
index 0597470..ccf3b90 100644
--- a/test/test-glContainer.cpp
+++ b/test/test-glContainer.cpp
@@ -305,6 +305,15 @@ BOOST_AUTO_TEST_CASE(iter_compare)
BOOST_AUTO_TEST_SUITE_END();
+BOOST_AUTO_TEST_CASE(create_copy_source, *boost::unit_test::timeout(1))
+{
+ const std::vector src {4, 6, 2, 4, 6, 0};
+ glContainer dst {src};
+ static_assert(std::is_same_v<decltype(src)::value_type, decltype(dst)::value_type>);
+ dst.unmap();
+ BOOST_CHECK_EQUAL_COLLECTIONS(src.begin(), src.end(), dst.begin(), dst.end());
+}
+
struct C {
int x;
float y;