scilab: fix typemaps for bool matrix

This commit is contained in:
Simon Marchetto 2014-03-11 09:56:21 +01:00
commit 22dad86b40
4 changed files with 68 additions and 15 deletions

View file

@ -42,5 +42,8 @@ test_matrix_typemaps("double", m, sum(m), m .* m);
//m = ["0" "3"; "1" "4"; "2" "5"]
//test_matrix_typemaps("charptr", m, strcat(m), m + m);
m = [%T, %F; %F, %T; %T, %F];
test_matrix_typemaps("bool", m, %T, ~m);
exec("swigtest.quit", -1);

View file

@ -10,6 +10,7 @@
%use_matrix_apply(int);
%use_matrix_apply(double);
%use_matrix_apply(char *);
%use_matrix_apply(bool);
%{
#include <stdlib.h>
@ -25,16 +26,16 @@ template<typename T> T in_matrix_func(T *inputMatrix, int nbRow, int nbCol) {
for (i=0; i<nbRow*nbCol; i++)
sum += inputMatrix[i];
return sum;
}
}
template<typename T> void out_matrix_func(T **resultMatrix, int *nbRowRes, int *nbColRes) {
template<typename T> void out_matrix_func(T **resultMatrix, int *nbRowRes, int *nbColRes) {
int size;
int i;
*nbRowRes = 3;
*nbColRes = 2;
size = (*nbRowRes) * (*nbColRes);
*resultMatrix = (T*) malloc(size * sizeof(T));
for (i=0; i<size; i++)
for (i=0; i<size; i++)
(*resultMatrix)[i] = i;
}
@ -56,9 +57,9 @@ template<> char* in_matrix_func(char **inputMatrix, int nbRow, int nbCol) {
for (i=0; i<nbRow*nbCol; i++)
strcat(s, inputMatrix[i]);
return s;
}
}
template<> void out_matrix_func(char ***resultMatrix, int *nbRowRes, int *nbColRes) {
template<> void out_matrix_func(char ***resultMatrix, int *nbRowRes, int *nbColRes) {
int size;
char *s;
int i;
@ -68,7 +69,7 @@ template<> void out_matrix_func(char ***resultMatrix, int *nbRowRes, int *nbColR
*resultMatrix = (char **) malloc(size * sizeof(char *));
for (i=0; i<size; i++) {
s = (char *) malloc(sizeof(char)+1);
sprintf(s, "%d", i);
sprintf(s, "%d", i);
(*resultMatrix)[i] = s;
}
}
@ -86,6 +87,39 @@ template<> void inout_matrix_func(char **inputMatrix, int nbRow, int nbCol, char
(*resultMatrix)[i] = s;
}
}
// bool matrix functions
template<> bool in_matrix_func(bool *inputMatrix, int nbRow, int nbCol) {
bool b = true;
int i;
b = inputMatrix[0];
for (i=1; i<nbRow*nbCol; i++)
b = b ^ inputMatrix[i];
return b;
}
template<> void out_matrix_func(bool **resultMatrix, int *nbRowRes, int *nbColRes) {
int size;
int i;
*nbRowRes = 3;
*nbColRes = 2;
size = (*nbRowRes) * (*nbColRes);
*resultMatrix = (bool*) malloc(size * sizeof(bool));
for (i=0; i<size; i++) {
(*resultMatrix)[i] = i % 2 == 0;
}
}
template<> void inout_matrix_func(bool *inputMatrix, int nbRow, int nbCol, bool **resultMatrix, int *nbRowRes, int *nbColRes) {
int i;
int size = nbRow * nbCol;
*nbRowRes = nbRow;
*nbColRes = nbCol;
*resultMatrix = (bool*) malloc(size * sizeof(bool));
for (i=0; i<size; i++) {
(*resultMatrix)[i] = ~inputMatrix[i];
}
}
%}
%define %instantiate_matrix_template_functions(NAME, TYPE...)
@ -97,7 +131,7 @@ template<> void inout_matrix_func(char **inputMatrix, int nbRow, int nbCol, char
%instantiate_matrix_template_functions(int, int);
%instantiate_matrix_template_functions(double, double);
%instantiate_matrix_template_functions(charptr, char *);
//%instantiate_matrix_template_functions(bool);
%instantiate_matrix_template_functions(bool, bool);