/* Transformation matrix code V1.30 11/11/03
   See tmat.h for details
   Copyright 2008 Jeffrey Lee
   This file is part of WOUM.
   WOUM is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   WOUM is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   You should have received a copy of the GNU General Public License
   along with WOUM.  If not, see <http://www.gnu.org/licenses/>.
*/

/* Multiplies 'in' by partial matrix '_' */

/* Column 0 */

out->t[0][0] = 0
#ifdef _00
+ fix_op(TYPE,_mul,in->t[0][0],_00)
#endif
#ifdef _10
+ fix_op(TYPE,_mul,in->t[0][1],_10)
#endif
#ifdef _20
+ fix_op(TYPE,_mul,in->t[0][2],_20)
#endif
#ifdef _30
+ fix_op(TYPE,_mul,in->t[0][3],_30)
#endif
;

out->t[1][0] = 0
#ifdef _00
+ fix_op(TYPE,_mul,in->t[1][0],_00)
#endif
#ifdef _10
+ fix_op(TYPE,_mul,in->t[1][1],_10)
#endif
#ifdef _20
+ fix_op(TYPE,_mul,in->t[1][2],_20)
#endif
#ifdef _30
+ fix_op(TYPE,_mul,in->t[1][3],_30)
#endif
;

out->t[2][0] = 0
#ifdef _00
+ fix_op(TYPE,_mul,in->t[2][0],_00)
#endif
#ifdef _10
+ fix_op(TYPE,_mul,in->t[2][1],_10)
#endif
#ifdef _20
+ fix_op(TYPE,_mul,in->t[2][2],_20)
#endif
#ifdef _30
+ fix_op(TYPE,_mul,in->t[2][3],_30)
#endif
;

out->t[3][0] = 0
#ifdef _00
+ fix_op(TYPE,_mul,in->t[3][0],_00)
#endif
#ifdef _10
+ fix_op(TYPE,_mul,in->t[3][1],_10)
#endif
#ifdef _20
+ fix_op(TYPE,_mul,in->t[3][2],_20)
#endif
#ifdef _30
+ fix_op(TYPE,_mul,in->t[3][3],_30)
#endif
;

/* Column 1 */

out->t[0][1] = 0
#ifdef _01
+ fix_op(TYPE,_mul,in->t[0][0],_01)
#endif
#ifdef _11
+ fix_op(TYPE,_mul,in->t[0][1],_11)
#endif
#ifdef _21
+ fix_op(TYPE,_mul,in->t[0][2],_21)
#endif
#ifdef _31
+ fix_op(TYPE,_mul,in->t[0][3],_31)
#endif
;

out->t[1][1] = 0
#ifdef _01
+ fix_op(TYPE,_mul,in->t[1][0],_01)
#endif
#ifdef _11
+ fix_op(TYPE,_mul,in->t[1][1],_11)
#endif
#ifdef _21
+ fix_op(TYPE,_mul,in->t[1][2],_21)
#endif
#ifdef _31
+ fix_op(TYPE,_mul,in->t[1][3],_31)
#endif
;

out->t[2][1] = 0
#ifdef _01
+ fix_op(TYPE,_mul,in->t[2][0],_01)
#endif
#ifdef _11
+ fix_op(TYPE,_mul,in->t[2][1],_11)
#endif
#ifdef _21
+ fix_op(TYPE,_mul,in->t[2][2],_21)
#endif
#ifdef _31
+ fix_op(TYPE,_mul,in->t[2][3],_31)
#endif
;

out->t[3][1] = 0
#ifdef _01
+ fix_op(TYPE,_mul,in->t[3][0],_01)
#endif
#ifdef _11
+ fix_op(TYPE,_mul,in->t[3][1],_11)
#endif
#ifdef _21
+ fix_op(TYPE,_mul,in->t[3][2],_21)
#endif
#ifdef _31
+ fix_op(TYPE,_mul,in->t[3][3],_31)
#endif
;

/* Column 2 */

out->t[0][2] = 0
#ifdef _02
+ fix_op(TYPE,_mul,in->t[0][0],_02)
#endif
#ifdef _12
+ fix_op(TYPE,_mul,in->t[0][1],_12)
#endif
#ifdef _22
+ fix_op(TYPE,_mul,in->t[0][2],_22)
#endif
#ifdef _32
+ fix_op(TYPE,_mul,in->t[0][3],_32)
#endif
;

out->t[1][2] = 0
#ifdef _02
+ fix_op(TYPE,_mul,in->t[1][0],_02)
#endif
#ifdef _12
+ fix_op(TYPE,_mul,in->t[1][1],_12)
#endif
#ifdef _22
+ fix_op(TYPE,_mul,in->t[1][2],_22)
#endif
#ifdef _32
+ fix_op(TYPE,_mul,in->t[1][3],_32)
#endif
;

out->t[2][2] = 0
#ifdef _02
+ fix_op(TYPE,_mul,in->t[2][0],_02)
#endif
#ifdef _12
+ fix_op(TYPE,_mul,in->t[2][1],_12)
#endif
#ifdef _22
+ fix_op(TYPE,_mul,in->t[2][2],_22)
#endif
#ifdef _32
+ fix_op(TYPE,_mul,in->t[2][3],_32)
#endif
;

out->t[3][2] = 0
#ifdef _02
+ fix_op(TYPE,_mul,in->t[3][0],_02)
#endif
#ifdef _12
+ fix_op(TYPE,_mul,in->t[3][1],_12)
#endif
#ifdef _22
+ fix_op(TYPE,_mul,in->t[3][2],_22)
#endif
#ifdef _32
+ fix_op(TYPE,_mul,in->t[3][3],_32)
#endif
;

/* Column 3 */

out->t[0][3] = 0
#ifdef _03
+ fix_op(TYPE,_mul,in->t[0][0],_03)
#endif
#ifdef _13
+ fix_op(TYPE,_mul,in->t[0][1],_13)
#endif
#ifdef _23
+ fix_op(TYPE,_mul,in->t[0][2],_23)
#endif
#ifdef _33
+ fix_op(TYPE,_mul,in->t[0][3],_33)
#endif
;

out->t[1][3] = 0
#ifdef _03
+ fix_op(TYPE,_mul,in->t[1][0],_03)
#endif
#ifdef _13
+ fix_op(TYPE,_mul,in->t[1][1],_13)
#endif
#ifdef _23
+ fix_op(TYPE,_mul,in->t[1][2],_23)
#endif
#ifdef _33
+ fix_op(TYPE,_mul,in->t[1][3],_33)
#endif
;

out->t[2][3] = 0
#ifdef _03
+ fix_op(TYPE,_mul,in->t[2][0],_03)
#endif
#ifdef _13
+ fix_op(TYPE,_mul,in->t[2][1],_13)
#endif
#ifdef _23
+ fix_op(TYPE,_mul,in->t[2][2],_23)
#endif
#ifdef _33
+ fix_op(TYPE,_mul,in->t[2][3],_33)
#endif
;

out->t[3][3] = 0
#ifdef _03
+ fix_op(TYPE,_mul,in->t[3][0],_03)
#endif
#ifdef _13
+ fix_op(TYPE,_mul,in->t[3][1],_13)
#endif
#ifdef _23
+ fix_op(TYPE,_mul,in->t[3][2],_23)
#endif
#ifdef _33
+ fix_op(TYPE,_mul,in->t[3][3],_33)
#endif
;

/* Cleanup */

#undef _00
#undef _01
#undef _02
#undef _03
#undef _10
#undef _11
#undef _12
#undef _13
#undef _20
#undef _21
#undef _22
#undef _23
#undef _30
#undef _31
#undef _32
#undef _33
