| 752 | |
| 753 | template <class T> |
| 754 | bool vtkPythonSetNArray(PyObject* o, const T* a, int ndim, const size_t* dims) |
| 755 | { |
| 756 | if (a) |
| 757 | { |
| 758 | size_t inc = 1; |
| 759 | for (int j = 1; j < ndim; j++) |
| 760 | { |
| 761 | inc *= dims[j]; |
| 762 | } |
| 763 | |
| 764 | size_t n = dims[0]; |
| 765 | Py_ssize_t m = static_cast<Py_ssize_t>(n); |
| 766 | |
| 767 | if (PyList_Check(o)) |
| 768 | { |
| 769 | m = PyList_Size(o); |
| 770 | if (m == static_cast<Py_ssize_t>(n)) |
| 771 | { |
| 772 | bool r = true; |
| 773 | if (ndim > 1) |
| 774 | { |
| 775 | for (Py_ssize_t i = 0; i < m && r; i++) |
| 776 | { |
| 777 | PyObject* s = PyList_GetItem(o, i); |
| 778 | r = vtkPythonSetNArray(s, a, ndim - 1, dims + 1); |
| 779 | a += inc; |
| 780 | } |
| 781 | } |
| 782 | else |
| 783 | { |
| 784 | for (Py_ssize_t i = 0; i < m && r; i++) |
| 785 | { |
| 786 | r = false; |
| 787 | PyObject* s = vtkPythonArgs::BuildValue(a[i]); |
| 788 | if (s) |
| 789 | { |
| 790 | PyList_SetItem(o, i, s); |
| 791 | r = true; |
| 792 | } |
| 793 | } |
| 794 | } |
| 795 | return r; |
| 796 | } |
| 797 | } |
| 798 | else if (PySequence_Check(o)) |
| 799 | { |
| 800 | m = PySequence_Size(o); |
| 801 | if (m == static_cast<Py_ssize_t>(n)) |
| 802 | { |
| 803 | bool r = true; |
| 804 | if (ndim > 1) |
| 805 | { |
| 806 | for (Py_ssize_t i = 0; i < m && r; i++) |
| 807 | { |
| 808 | r = false; |
| 809 | PyObject* s = PySequence_GetItem(o, i); |
| 810 | if (s) |
| 811 | { |
nothing calls this directly
no test coverage detected