Use data method to get pointer from std::vector
Do not use `&v.front()` to get the pointer from an `std::vector`. That behavior is undefined when the vector is empty. Instead, use `v.data()`.
This commit is contained in:
parent
2e243cbbac
commit
e23989bde1
@ -958,7 +958,7 @@ public:
|
||||
///
|
||||
VTKM_CONT ArrayHandleNewStyle(const std::vector<vtkm::cont::internal::Buffer>& buffers,
|
||||
const StorageType& storage = StorageType())
|
||||
: Internals(std::make_shared<InternalsStruct>(&buffers.front(), storage))
|
||||
: Internals(std::make_shared<InternalsStruct>(buffers.data(), storage))
|
||||
{
|
||||
VTKM_ASSERT(static_cast<vtkm::IdComponent>(this->Internals->Buffers.size()) ==
|
||||
GetNumberOfBuffers());
|
||||
@ -1304,7 +1304,7 @@ public:
|
||||
///
|
||||
VTKM_CONT vtkm::cont::internal::Buffer* GetBuffers() const
|
||||
{
|
||||
return &this->Internals->Buffers.front();
|
||||
return this->Internals->Buffers.data();
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -334,11 +334,11 @@ VTKM_CONT inline void StdVectorReallocater(void*& memory,
|
||||
{
|
||||
using vector_type = std::vector<T, Allocator>;
|
||||
vector_type* vector = reinterpret_cast<vector_type*>(container);
|
||||
VTKM_ASSERT(memory == &vector->front());
|
||||
VTKM_ASSERT(vector->empty() || (memory == vector->data()));
|
||||
VTKM_ASSERT(oldSize == static_cast<vtkm::BufferSizeType>(vector->size()));
|
||||
|
||||
vector->resize(static_cast<std::size_t>(newSize));
|
||||
memory = &vector->front();
|
||||
memory = vector->data();
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
@ -396,7 +396,7 @@ VTKM_CONT vtkm::cont::ArrayHandleBasic<T> make_ArrayHandle(const std::vector<T,
|
||||
{
|
||||
if (!array.empty())
|
||||
{
|
||||
return make_ArrayHandle(&array.front(), static_cast<vtkm::Id>(array.size()), copy);
|
||||
return make_ArrayHandle(array.data(), static_cast<vtkm::Id>(array.size()), copy);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -438,7 +438,7 @@ VTKM_CONT vtkm::cont::ArrayHandleBasic<T> make_ArrayHandle(std::vector<T, Alloca
|
||||
}
|
||||
if (!array.empty())
|
||||
{
|
||||
return make_ArrayHandle(&array.front(), static_cast<vtkm::Id>(array.size()), copy);
|
||||
return make_ArrayHandle(array.data(), static_cast<vtkm::Id>(array.size()), copy);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -77,7 +77,7 @@ vtkm::cont::ArrayHandleExtrudeCoords<T> make_ArrayHandleExtrudeCoords(
|
||||
if (!array.empty())
|
||||
{
|
||||
return make_ArrayHandleExtrudeCoords(
|
||||
&array.front(), static_cast<vtkm::Id>(array.size()), numberOfPlanes, cylindrical, copy);
|
||||
array.data(), static_cast<vtkm::Id>(array.size()), numberOfPlanes, cylindrical, copy);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -48,10 +48,10 @@ void VectorReallocator(void*& memory,
|
||||
{
|
||||
std::vector<T>* v = reinterpret_cast<std::vector<T>*>(container);
|
||||
VTKM_TEST_ASSERT(v->size() == static_cast<std::size_t>(oldSize));
|
||||
VTKM_TEST_ASSERT(memory == &v->front());
|
||||
VTKM_TEST_ASSERT(v->empty() || (memory == v->data()));
|
||||
|
||||
v->resize(static_cast<std::size_t>(newSize));
|
||||
memory = &v->front();
|
||||
memory = v->data();
|
||||
}
|
||||
struct VectorDeleter
|
||||
{
|
||||
@ -67,7 +67,7 @@ struct VectorDeleter
|
||||
{
|
||||
if (this->Data)
|
||||
{
|
||||
VTKM_TEST_ASSERT(reinterpret_cast<T*>(p) == &this->Data->front());
|
||||
VTKM_TEST_ASSERT(reinterpret_cast<T*>(p) == this->Data->data());
|
||||
this->Data.reset();
|
||||
}
|
||||
}
|
||||
@ -132,7 +132,7 @@ void DoTest()
|
||||
|
||||
std::cout << "Reset with device data" << std::endl;
|
||||
std::vector<T> v(ARRAY_SIZE);
|
||||
void* devicePointer = &v.front();
|
||||
void* devicePointer = v.data();
|
||||
SetPortal(MakePortal(devicePointer, ARRAY_SIZE));
|
||||
buffer.Reset(vtkm::cont::internal::BufferInfo(device,
|
||||
devicePointer,
|
||||
|
@ -381,14 +381,14 @@ private:
|
||||
|
||||
{
|
||||
vtkm::cont::ArrayHandleSOA<Vec3> soaArray = vtkm::cont::make_ArrayHandleSOA<Vec3>(
|
||||
{ &vector0.front(), &vector1.front(), &vector2.front() }, ARRAY_SIZE);
|
||||
{ vector0.data(), vector1.data(), vector2.data() }, ARRAY_SIZE);
|
||||
VTKM_TEST_ASSERT(soaArray.GetNumberOfValues() == ARRAY_SIZE);
|
||||
CheckPortal(soaArray.ReadPortal());
|
||||
}
|
||||
|
||||
{
|
||||
vtkm::cont::ArrayHandleSOA<Vec3> soaArray = vtkm::cont::make_ArrayHandleSOA(
|
||||
ARRAY_SIZE, vtkm::CopyFlag::Off, &vector0.front(), &vector1.front(), &vector2.front());
|
||||
ARRAY_SIZE, vtkm::CopyFlag::Off, vector0.data(), vector1.data(), vector2.data());
|
||||
VTKM_TEST_ASSERT(soaArray.GetNumberOfValues() == ARRAY_SIZE);
|
||||
CheckPortal(soaArray.ReadPortal());
|
||||
}
|
||||
|
@ -211,9 +211,9 @@ void RectilinearTests()
|
||||
|
||||
std::cout << " Create with C array" << std::endl;
|
||||
dataSet = dataSetBuilder.Create(
|
||||
dimensions[0], dimensions[1], &xCoordinates.front(), &yCoordinates.front());
|
||||
dataSet.AddPointField("pointvar", &varP2D.front(), numPoints);
|
||||
dataSet.AddCellField("cellvar", &varC2D.front(), numCells);
|
||||
dimensions[0], dimensions[1], xCoordinates.data(), yCoordinates.data());
|
||||
dataSet.AddPointField("pointvar", varP2D.data(), numPoints);
|
||||
dataSet.AddCellField("cellvar", varC2D.data(), numCells);
|
||||
ValidateDataSet(dataSet, ndims, numPoints, numCells, bounds);
|
||||
|
||||
std::cout << " Create with ArrayHandle" << std::endl;
|
||||
@ -258,9 +258,9 @@ void RectilinearTests()
|
||||
dataSet = dataSetBuilder.Create(dimensions[0],
|
||||
dimensions[1],
|
||||
dimensions[2],
|
||||
&xCoordinates.front(),
|
||||
&yCoordinates.front(),
|
||||
&zCoordinates.front());
|
||||
xCoordinates.data(),
|
||||
yCoordinates.data(),
|
||||
zCoordinates.data());
|
||||
dataSet.AddPointField("pointvar", vtkm::cont::make_ArrayHandle(varP3D, vtkm::CopyFlag::Off));
|
||||
dataSet.AddCellField("cellvar", vtkm::cont::make_ArrayHandle(varC3D, vtkm::CopyFlag::Off));
|
||||
ValidateDataSet(dataSet, ndims, numPoints, numCells, bounds);
|
||||
|
Loading…
Reference in New Issue
Block a user