1
// Copyright 2010 Jussi Lepisto
3
#ifndef TEMPLATES_ITERATOR_H
4
#define TEMPLATES_ITERATOR_H
11
#include "templates.h"
15
template<typename Scalar, int Rows, int Cols>
16
PyObject* MatrixIterator_iter(MATRIXITERATOR_TYPE* self);
17
template<typename Scalar, int Rows, int Cols>
18
PyObject* MatrixIterator_iternext(MATRIXITERATOR_TYPE* self);
20
//////////////////////////////////////////////////////////////////////////////
22
//////////////////////////////////////////////////////////////////////////////
25
template<typename Scalar, int Rows, int Cols>
26
MATRIXITERATOR_TYPE* MatrixIterator_Create()
28
PyTypeObject* t = MatrixIterator_GetType<MATRIX_TEMPLATE>();
29
return (MATRIXITERATOR_TYPE*)PyObject_New(MATRIXITERATOR_TYPE, t);
33
template<typename Scalar, int Rows, int Cols>
34
PyObject* MatrixIterator_iter(MATRIXITERATOR_TYPE* self)
37
return (PyObject*)self;
40
template<typename Scalar, int Rows, int Cols>
41
PyObject* MatrixIterator_iternext(MATRIXITERATOR_TYPE* self)
43
if(self->pObject == NULL || self->pMatrix == NULL)
45
PyErr_SetString(PyExc_RuntimeError, "MatrixIterator not initialized");
50
if(self->row == self->pMatrix->rows())
52
Py_DECREF(self->pObject);
56
PyObject* value = PyFloat_FromDouble(
57
(*self->pMatrix)(self->row, self->col));
60
if(self->col == self->pMatrix->cols())