Skip to content

Commit

Permalink
STYLE: Remove unnecessary preliminary initialization from "Bridge/NumPy"
Browse files Browse the repository at this point in the history
Regarding the initialization of local variables in "Bridge/NumPy", replaced code
like:

    T var = x;

    var = f();

With `const T var = f();`

Following C++ Core Guidelines, May 11, 2024, "Don’t declare a variable until
you have a value to initialize it with",
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es22-dont-declare-a-variable-until-you-have-a-value-to-initialize-it-with
  • Loading branch information
N-Dekker authored and dzenanz committed Oct 3, 2024
1 parent c78a8c6 commit 0aacf02
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 74 deletions.
22 changes: 7 additions & 15 deletions Modules/Bridge/NumPy/include/itkPyBuffer.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,9 @@ template <class TImage>
PyObject *
PyBuffer<TImage>::_GetArrayViewFromImage(ImageType * image)
{
PyObject * memoryView = nullptr;
Py_buffer pyBuffer{};
Py_buffer pyBuffer{};

Py_ssize_t len = 1;
int res = 0;

if (!image)
{
Expand All @@ -58,8 +56,8 @@ PyBuffer<TImage>::_GetArrayViewFromImage(ImageType * image)
len *= numberOfComponents;
len *= sizeof(ComponentType);

res = PyBuffer_FillInfo(&pyBuffer, nullptr, itkImageBuffer, len, 0, PyBUF_CONTIG);
memoryView = PyMemoryView_FromBuffer(&pyBuffer);
const int res = PyBuffer_FillInfo(&pyBuffer, nullptr, itkImageBuffer, len, 0, PyBUF_CONTIG);
PyObject * const memoryView = PyMemoryView_FromBuffer(&pyBuffer);

PyBuffer_Release(&pyBuffer);

Expand All @@ -71,7 +69,6 @@ auto
PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObject * numOfComponent)
-> const OutputImagePointer
{
PyObject * shapeseq = nullptr;
PyObject * item = nullptr;

Py_buffer pyBuffer{};
Expand All @@ -80,11 +77,6 @@ PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObj
SizeType sizeFortran;
SizeValueType numberOfPixels = 1;

long numberOfComponents = 1;
unsigned int dimension = 0;

size_t len = 1;

if (PyObject_GetBuffer(arr, &pyBuffer, PyBUF_ND | PyBUF_ANY_CONTIGUOUS) == -1)
{
PyErr_SetString(PyExc_RuntimeError, "Cannot get an instance of NumPy array.");
Expand All @@ -97,10 +89,10 @@ PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObj

PyBuffer_Release(&pyBuffer);

shapeseq = PySequence_Fast(shape, "expected sequence");
dimension = PySequence_Size(shape);
PyObject * const shapeseq = PySequence_Fast(shape, "expected sequence");
const unsigned int dimension = PySequence_Size(shape);

numberOfComponents = PyInt_AsLong(numOfComponent);
const long numberOfComponents = PyInt_AsLong(numOfComponent);

for (unsigned int i = 0; i < dimension; ++i)
{
Expand All @@ -116,7 +108,7 @@ PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObj
isFortranContiguous = true;
}

len = numberOfPixels * numberOfComponents * sizeof(ComponentType);
const size_t len = numberOfPixels * numberOfComponents * sizeof(ComponentType);
if (bufferLength != len)
{
PyErr_SetString(PyExc_RuntimeError, "Size mismatch of image and Buffer.");
Expand Down
31 changes: 9 additions & 22 deletions Modules/Bridge/NumPy/include/itkPyVectorContainer.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,7 @@ template <typename TElementIdentifier, typename TElement>
PyObject *
PyVectorContainer<TElementIdentifier, TElement>::_array_view_from_vector_container(VectorContainerType * vector)
{
PyObject * memoryView = nullptr;
Py_buffer pyBuffer{};

int res = 0;
Py_buffer pyBuffer{};

if (!vector)
{
Expand All @@ -45,8 +42,8 @@ PyVectorContainer<TElementIdentifier, TElement>::_array_view_from_vector_contain
Py_ssize_t len = vector->Size();
len *= sizeof(DataType);

res = PyBuffer_FillInfo(&pyBuffer, nullptr, vectorBuffer, len, 0, PyBUF_CONTIG);
memoryView = PyMemoryView_FromBuffer(&pyBuffer);
const int res = PyBuffer_FillInfo(&pyBuffer, nullptr, vectorBuffer, len, 0, PyBUF_CONTIG);
PyObject * const memoryView = PyMemoryView_FromBuffer(&pyBuffer);

PyBuffer_Release(&pyBuffer);

Expand All @@ -58,18 +55,8 @@ auto
PyVectorContainer<TElementIdentifier, TElement>::_vector_container_from_array(PyObject * arr, PyObject * shape) -> const
typename VectorContainerType::Pointer
{
PyObject * obj = nullptr;
PyObject * shapeseq = nullptr;
PyObject * item = nullptr;

Py_buffer pyBuffer{};

size_t numberOfElements = 1;

unsigned int dimension = 0;

size_t len = 1;

if (PyObject_GetBuffer(arr, &pyBuffer, PyBUF_CONTIG) == -1)
{
PyErr_SetString(PyExc_RuntimeError, "Cannot get an instance of NumPy array.");
Expand All @@ -80,14 +67,14 @@ PyVectorContainer<TElementIdentifier, TElement>::_vector_container_from_array(Py
const Py_ssize_t bufferLength = pyBuffer.len;
const void * const buffer = pyBuffer.buf;

obj = shape;
shapeseq = PySequence_Fast(obj, "expected sequence");
dimension = PySequence_Size(obj);
PyObject * const obj = shape;
PyObject * const shapeseq = PySequence_Fast(obj, "expected sequence");
const unsigned int dimension = PySequence_Size(obj);

item = PySequence_Fast_GET_ITEM(shapeseq, 0); // Only one dimension
numberOfElements = static_cast<size_t>(PyInt_AsLong(item));
PyObject * item = PySequence_Fast_GET_ITEM(shapeseq, 0); // Only one dimension
const size_t numberOfElements = static_cast<size_t>(PyInt_AsLong(item));

len = numberOfElements * sizeof(DataType);
const size_t len = numberOfElements * sizeof(DataType);
if (bufferLength != len)
{
PyErr_SetString(PyExc_RuntimeError, "Size mismatch of vector and Buffer.");
Expand Down
53 changes: 16 additions & 37 deletions Modules/Bridge/NumPy/include/itkPyVnl.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,7 @@ template <class TElement>
PyObject *
PyVnl<TElement>::_GetArrayViewFromVnlVector(VectorType * vector)
{
PyObject * memoryView = nullptr;
Py_buffer pyBuffer{};

int res = 0;
Py_buffer pyBuffer{};

if (!vector)
{
Expand All @@ -45,8 +42,8 @@ PyVnl<TElement>::_GetArrayViewFromVnlVector(VectorType * vector)
Py_ssize_t len = vector->size();
len *= sizeof(DataType);

res = PyBuffer_FillInfo(&pyBuffer, nullptr, vectorBuffer, len, 0, PyBUF_CONTIG);
memoryView = PyMemoryView_FromBuffer(&pyBuffer);
const int res = PyBuffer_FillInfo(&pyBuffer, nullptr, vectorBuffer, len, 0, PyBUF_CONTIG);
PyObject * const memoryView = PyMemoryView_FromBuffer(&pyBuffer);

PyBuffer_Release(&pyBuffer);

Expand All @@ -57,18 +54,8 @@ template <class TElement>
auto
PyVnl<TElement>::_GetVnlVectorFromArray(PyObject * arr, PyObject * shape) -> const VectorType
{
PyObject * obj = nullptr;
PyObject * shapeseq = nullptr;
PyObject * item = nullptr;

Py_buffer pyBuffer{};

size_t numberOfElements = 1;

unsigned int dimension = 0;

size_t len = 1;

if (PyObject_GetBuffer(arr, &pyBuffer, PyBUF_CONTIG) == -1)
{
PyErr_SetString(PyExc_RuntimeError, "Cannot get an instance of NumPy array.");
Expand All @@ -79,14 +66,14 @@ PyVnl<TElement>::_GetVnlVectorFromArray(PyObject * arr, PyObject * shape) -> con
const Py_ssize_t bufferLength = pyBuffer.len;
const void * const buffer = pyBuffer.buf;

obj = shape;
shapeseq = PySequence_Fast(obj, "expected sequence");
dimension = PySequence_Size(obj);
PyObject * const obj = shape;
PyObject * const shapeseq = PySequence_Fast(obj, "expected sequence");
const unsigned int dimension = PySequence_Size(obj);

item = PySequence_Fast_GET_ITEM(shapeseq, 0); // Only one dimension
numberOfElements = static_cast<size_t>(PyInt_AsLong(item));
PyObject * const item = PySequence_Fast_GET_ITEM(shapeseq, 0); // Only one dimension
const size_t numberOfElements = static_cast<size_t>(PyInt_AsLong(item));

len = numberOfElements * sizeof(DataType);
const size_t len = numberOfElements * sizeof(DataType);
if (bufferLength != len)
{
PyErr_SetString(PyExc_RuntimeError, "Size mismatch of vector and Buffer.");
Expand All @@ -104,10 +91,7 @@ template <class TElement>
PyObject *
PyVnl<TElement>::_GetArrayViewFromVnlMatrix(MatrixType * matrix)
{
PyObject * memoryView = nullptr;
Py_buffer pyBuffer{};

int res = 0;
Py_buffer pyBuffer{};

if (!matrix)
{
Expand All @@ -122,8 +106,8 @@ PyVnl<TElement>::_GetArrayViewFromVnlMatrix(MatrixType * matrix)
Py_ssize_t len = matrix->size();
len *= sizeof(DataType);

res = PyBuffer_FillInfo(&pyBuffer, nullptr, matrixBuffer, len, 0, PyBUF_CONTIG);
memoryView = PyMemoryView_FromBuffer(&pyBuffer);
const int res = PyBuffer_FillInfo(&pyBuffer, nullptr, matrixBuffer, len, 0, PyBUF_CONTIG);
PyObject * const memoryView = PyMemoryView_FromBuffer(&pyBuffer);

PyBuffer_Release(&pyBuffer);

Expand All @@ -134,17 +118,12 @@ template <class TElement>
auto
PyVnl<TElement>::_GetVnlMatrixFromArray(PyObject * arr, PyObject * shape) -> const MatrixType
{
PyObject * obj = nullptr;
PyObject * shapeseq = nullptr;
PyObject * item = nullptr;

Py_buffer pyBuffer{};

size_t numberOfElements = 1;

unsigned int dimension = 0;

size_t len = 1;
unsigned int size[2];

if (PyObject_GetBuffer(arr, &pyBuffer, PyBUF_CONTIG) == -1)
Expand All @@ -157,9 +136,9 @@ PyVnl<TElement>::_GetVnlMatrixFromArray(PyObject * arr, PyObject * shape) -> con
const Py_ssize_t bufferLength = pyBuffer.len;
const void * const buffer = pyBuffer.buf;

obj = shape;
shapeseq = PySequence_Fast(obj, "expected sequence");
dimension = PySequence_Size(obj);
PyObject * const obj = shape;
PyObject * const shapeseq = PySequence_Fast(obj, "expected sequence");
const unsigned int dimension = PySequence_Size(obj);

for (unsigned int i = 0; i < 2; ++i)
{
Expand All @@ -168,7 +147,7 @@ PyVnl<TElement>::_GetVnlMatrixFromArray(PyObject * arr, PyObject * shape) -> con
numberOfElements *= size[i];
}

len = numberOfElements * sizeof(DataType);
const size_t len = numberOfElements * sizeof(DataType);
if (bufferLength != len)
{
PyErr_SetString(PyExc_RuntimeError, "Size mismatch of matrix and Buffer.");
Expand Down

0 comments on commit 0aacf02

Please sign in to comment.