add constructor for array with iterators or pointers
This commit is contained in:
@@ -107,6 +107,17 @@ namespace OpenVulkano
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename InputIt, std::enable_if_t<!std::is_same_v<typename std::iterator_traits<InputIt>::value_type, void>, int> = 0>
|
||||||
|
Array(InputIt first, InputIt last) : size(std::distance(first, last)), data(MakeBuffer(size))
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
while (first != last)
|
||||||
|
{
|
||||||
|
new (&data[i++]) T(*first);
|
||||||
|
++first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
~Array() noexcept
|
~Array() noexcept
|
||||||
{
|
{
|
||||||
ClearData();
|
ClearData();
|
||||||
@@ -354,4 +365,7 @@ namespace OpenVulkano
|
|||||||
{
|
{
|
||||||
return !(rhs < lhs);
|
return !(rhs < lhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename InputIt>
|
||||||
|
Array(InputIt first, InputIt last) -> Array<typename std::iterator_traits<InputIt>::value_type>;
|
||||||
}
|
}
|
||||||
@@ -237,4 +237,26 @@ TEST_CASE("Swap method", "[Array]")
|
|||||||
arr1.Swap(arr2);
|
arr1.Swap(arr2);
|
||||||
REQUIRE(arr1[0] == 4);
|
REQUIRE(arr1[0] == 4);
|
||||||
REQUIRE(arr2[0] == 1);
|
REQUIRE(arr2[0] == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Iterator constructor", "[Array]")
|
||||||
|
{
|
||||||
|
{
|
||||||
|
char data[] = "Hello world";
|
||||||
|
Array<char> arr(data, data + sizeof(data));
|
||||||
|
REQUIRE(arr.Data() != data);
|
||||||
|
for (int i = 0; i < sizeof(data); i++)
|
||||||
|
{
|
||||||
|
REQUIRE(data[i] == arr[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Array<int> arr = { 1, 2, 3, 4, 5 };
|
||||||
|
Array<double> arr2(arr.begin(), arr.end());
|
||||||
|
for (int i = 0; i < arr.Size(); i++)
|
||||||
|
{
|
||||||
|
REQUIRE(arr[i] == arr2[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user