#include #ifndef DIMSVERSION #define DIMSVERSION 1 #endif #if DIMSVERSION == 1 forall( [N] ) size_t foo( array( size_t, N ) & a ) { size_t retval = 0; for( i; N ) { retval += a[i]; } return retval; } #elif DIMSVERSION == 2 forall( [N], [M] ) size_t foo( array( size_t, N, M ) & a ) { size_t retval = 0; for( i; N ) for( j; M ) { retval += a[i][j]; } return retval; } #elif DIMSVERSION == 3 forall( [N] ) size_t foo( array( size_t, N ) & a, array( size_t, N ) & b ) { size_t retval = 0; for( i; N ) { retval += a[i] - b[i]; } return retval; } #elif DIMSVERSION == 4 forall( [M], [N], [P] ) void foo ( array(size_t, M, P) & src1, array(size_t, P, N) & src2, array(size_t, M, N) & tgt ) { for (i; M) for (j; N) { tgt[i][j] = 0; for (k; P) tgt[i][j] += src1[i][k] * src2[k][j]; } } #else #error Bad Version #endif