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:
Kenneth Moreland 2020-07-20 10:41:20 -06:00
parent 2e243cbbac
commit e23989bde1
6 changed files with 19 additions and 19 deletions

@ -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);