summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;