+
+/* matrix vector callbacks */
+int mathutils_matrix_vector_cb_index= -1;
+
+static int mathutils_matrix_vector_check(MatrixObject *self)
+{
+ return Matrix_ReadCallback(self);
+}
+
+static int mathutils_matrix_vector_get(MatrixObject *self, int subtype, float *vec_from)
+{
+ int i;
+ if(!Matrix_ReadCallback(self))
+ return 0;
+
+ for(i=0; i<self->colSize; i++)
+ vec_from[i]= self->matrix[subtype][i];
+
+ return 1;
+}
+
+static int mathutils_matrix_vector_set(MatrixObject *self, int subtype, float *vec_to)
+{
+ int i;
+ if(!Matrix_ReadCallback(self))
+ return 0;
+
+ for(i=0; i<self->colSize; i++)
+ self->matrix[subtype][i]= vec_to[i];
+
+ Matrix_WriteCallback(self);
+ return 1;
+}
+
+static int mathutils_matrix_vector_get_index(MatrixObject *self, int subtype, float *vec_from, int index)
+{
+ if(!Matrix_ReadCallback(self))
+ return 0;
+
+ vec_from[index]= self->matrix[subtype][index];
+ return 1;
+}
+
+static int mathutils_matrix_vector_set_index(MatrixObject *self, int subtype, float *vec_to, int index)
+{
+ if(!Matrix_ReadCallback(self))
+ return 0;
+
+ self->matrix[subtype][index]= vec_to[index];
+
+ Matrix_WriteCallback(self);
+ return 1;
+}
+
+Mathutils_Callback mathutils_matrix_vector_cb = {
+ mathutils_matrix_vector_check,
+ mathutils_matrix_vector_get,
+ mathutils_matrix_vector_set,
+ mathutils_matrix_vector_get_index,
+ mathutils_matrix_vector_set_index
+};
+/* matrix vector callbacks, this is so you can do matrix[i][j] = val */
+