Main Page | Modules | Class List | File List | Class Members | File Members

4x4matrixf.h

Go to the documentation of this file.
00001 
00014 /* This library is free software; you can redistribute it and/or
00015    modify it under the terms of the GNU Lesser General Public
00016    License as published by the Free Software Foundation; either
00017    version 2.1 of the License, or (at your option) any later version.
00018 
00019    This library is distributed in the hope that it will be useful,
00020    but WITHOUT ANY WARRANTY; without even the implied warranty of
00021    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022    Lesser General Public License for more details.
00023 
00024    You should have received a copy of the GNU Lesser General Public
00025    License along with this library; if not, write to the Free Software
00026    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027 */
00028 
00029 #ifndef _GAN_4X4MATRIXF_H
00030 #define _GAN_4X4MATRIXF_H
00031 
00032 #include <stdlib.h>
00033 #include <stdio.h>
00034 #include <math.h>
00035 #include <gandalf/common/misc_defs.h>
00049 /* This library is free software; you can redistribute it and/or
00050    modify it under the terms of the GNU Lesser General Public
00051    License as published by the Free Software Foundation; either
00052    version 2.1 of the License, or (at your option) any later version.
00053 
00054    This library is distributed in the hope that it will be useful,
00055    but WITHOUT ANY WARRANTY; without even the implied warranty of
00056    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00057    Lesser General Public License for more details.
00058 
00059    You should have received a copy of the GNU Lesser General Public
00060    License along with this library; if not, write to the Free Software
00061    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00062 */
00063 
00064 #ifndef _GAN_REPEAT44_H
00065 #define _GAN_REPEAT44_H
00066 
00080 /* This library is free software; you can redistribute it and/or
00081    modify it under the terms of the GNU Lesser General Public
00082    License as published by the Free Software Foundation; either
00083    version 2.1 of the License, or (at your option) any later version.
00084 
00085    This library is distributed in the hope that it will be useful,
00086    but WITHOUT ANY WARRANTY; without even the implied warranty of
00087    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00088    Lesser General Public License for more details.
00089 
00090    You should have received a copy of the GNU Lesser General Public
00091    License along with this library; if not, write to the Free Software
00092    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00093 */
00094 
00095 #ifndef _GAN_REPEAT1_H
00096 #define _GAN_REPEAT1_H
00097 
00098 #ifdef __cplusplus
00099 extern "C" {
00100 #endif
00101 
00102 /* macros for constructing one-fold repetitions (for consistency) */
00103 #define GAN_REP1_AS(a,b,p1) (a p1 b)
00104 #define GAN_REP1_A(a,p1) (a p1)
00105 #define GAN_REP1_A_C(a,b) GAN_REP1_A(a,b,x)
00106 
00107 #define GAN_FREP1_A(a,b,p1,q1) (a p1 b q1)
00108 #define GAN_FREP1_A_C(a,b,p1) GAN_FREP1_A(a,b,x,p1)
00109 
00110 #define GAN_REP1_ABS(a,b,c,p1,q1) (a p1 b q1 c)
00111 #define GAN_REP1_AAS(a,b,c,p1) GAN_REP1_ABS(a,b,c,p1,p1)
00112 #define GAN_REP1_AAS_C(a,b,c) GAN_REP1_AAS(a,b,c,x)
00113 
00114 #define GAN_REP1_AB(a,b,p1,q1) (a p1 b q1)
00115 #define GAN_REP1_AA(a,b,p1) GAN_REP1_AB(a,b,p1,p1)
00116 #define GAN_REP1_AA_C(a,b) GAN_REP1_AA(a,b,x)
00117 
00118 #define GAN_REP1_ABCS(a,b,c,d,p1,q1,r1) (a p1 b q1 c r1 d)
00119 #define GAN_REP1_ABC(a,b,c,p1,q1,r1) (a p1 b q1 c r1)
00120 #define GAN_REP1_AAA(a,b,c,p1) GAN_REP1_ABC(a,b,c,p1,p1,p1)
00121 #define GAN_REP1_AAA_C(a,b,c) GAN_REP1_AAA(a,b,c,x)
00122 
00123 #define GAN_REP1_OP_AB(a,b,p1,q1,op) (a p1 b q1)
00124 #define GAN_REP1_OP_AA(a,b,p1,op) GAN_REP1_OP_AB(a,b,p1,p1,op)
00125 #define GAN_REP1_OP_AA_C(a,b,op) GAN_REP1_OP_AA(a,b,x,op)
00126 
00127 #ifdef __cplusplus
00128 }
00129 #endif
00130 
00131 #endif /* #ifndef _GAN_REPEAT1_H */
00132 
00145 /* This library is free software; you can redistribute it and/or
00146    modify it under the terms of the GNU Lesser General Public
00147    License as published by the Free Software Foundation; either
00148    version 2.1 of the License, or (at your option) any later version.
00149 
00150    This library is distributed in the hope that it will be useful,
00151    but WITHOUT ANY WARRANTY; without even the implied warranty of
00152    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00153    Lesser General Public License for more details.
00154 
00155    You should have received a copy of the GNU Lesser General Public
00156    License along with this library; if not, write to the Free Software
00157    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00158 */
00159 
00160 #ifndef _GAN_REPEAT2_H
00161 #define _GAN_REPEAT2_H
00162 
00163 #ifdef __cplusplus
00164 extern "C" {
00165 #endif
00166 
00167 /* macros for constructing two-fold repetitions */
00168 #define GAN_REP2_AS(a,b,p1,p2) (a p1 b, a p2 b)
00169 #define GAN_REP2_A(a,p1,p2) (a p1, a p2)
00170 #define GAN_REP2_AS_C(a,b) GAN_REP2_AS(a,b,x,y)
00171 #define GAN_REP2_A_C(a) GAN_REP2_A(a,x,y)
00172 
00173 #define GAN_FREP2_A(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00174 #define GAN_FREP2_A_C(a,b,p1,p2) GAN_FREP2_A(a,b,x,y,p1,p2)
00175 
00176 #define GAN_REP2_AB(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00177 #define GAN_REP2_AA(a,b,p1,p2) GAN_REP2_AB(a,b,p1,p2,p1,p2)
00178 #define GAN_REP2_AA_C(a,b) GAN_REP2_AA(a,b,x,y)
00179 
00180 #define GAN_REP2_ABS(a,b,c,p1,p2,q1,q2) (a p1 b q1 c, a p2 b q2 c)
00181 #define GAN_REP2_AAS(a,b,c,p1,p2) GAN_REP2_ABS(a,b,c,p1,p2,p1,p2)
00182 #define GAN_REP2_AAS_C(a,b,c) GAN_REP2_AAS(a,b,c,x,y)
00183 
00184 #define GAN_REP2_AB(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00185 #define GAN_REP2_AA(a,b,p1,p2) GAN_REP2_AB(a,b,p1,p2,p1,p2)
00186 #define GAN_REP2_AA_C(a,b) GAN_REP2_AA(a,b,x,y)
00187 
00188 #define GAN_REP2_ABCS(a,b,c,d,p1,p2,q1,q2,r1,r2)\
00189            (a p1 b q1 c r1 d, a p2 b q2 c r2 d)
00190 #define GAN_REP2_ABC(a,b,c,p1,p2,q1,q2,r1,r2)\
00191            (a p1 b q1 c r1, a p2 b q2 c r2)
00192 #define GAN_REP2_AAA(a,b,c,p1,p2) GAN_REP2_ABC(a,b,c,p1,p2,p1,p2,p1,p2)
00193 #define GAN_REP2_AAA_C(a,b,c) GAN_REP2_AAA(a,b,c,x,y)
00194 
00195 #define GAN_REP2_OP_AB(a,b,p1,p2,q1,q2,op)\
00196            (a p1 b q1 op a p2 b q2)
00197 #define GAN_REP2_OP_AA(a,b,p1,p2,op) GAN_REP2_OP_AB(a,b,p1,p2,p1,p2,op)
00198 #define GAN_REP2_OP_AA_C(a,b,op) GAN_REP2_OP_AA(a,b,x,y,op)
00199 
00200 #ifdef __cplusplus
00201 }
00202 #endif
00203 
00204 #endif /* #ifndef _GAN_REPEAT2_H */
00205 
00218 /* This library is free software; you can redistribute it and/or
00219    modify it under the terms of the GNU Lesser General Public
00220    License as published by the Free Software Foundation; either
00221    version 2.1 of the License, or (at your option) any later version.
00222 
00223    This library is distributed in the hope that it will be useful,
00224    but WITHOUT ANY WARRANTY; without even the implied warranty of
00225    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00226    Lesser General Public License for more details.
00227 
00228    You should have received a copy of the GNU Lesser General Public
00229    License along with this library; if not, write to the Free Software
00230    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00231 */
00232 
00233 #ifndef _GAN_REPEAT3_H
00234 #define _GAN_REPEAT3_H
00235 
00236 #ifdef __cplusplus
00237 extern "C" {
00238 #endif
00239 
00240 /* macros for constructing three-fold repetitions */
00241 #define GAN_REP3_AS(a,b,p1,p2,p3) (a p1 b, a p2 b, a p3 b)
00242 #define GAN_REP3_AS_C(a,b) GAN_REP3_AS(a,b,x,y,z)
00243 #define GAN_REP3_A(a,p1,p2,p3) (a p1, a p2, a p3)
00244 #define GAN_REP3_A_C(a) GAN_REP3_A(a,x,y,z)
00245 
00246 #define GAN_FREP3_A(a,b,p1,p2,p3,q1,q2,q3) (a p1 b q1, a p2 b q2, a p3 b q3)
00247 #define GAN_FREP3_A_C(a,b,p1,p2,p3) GAN_FREP3_A(a,b,x,y,z,p1,p2,p3)
00248 
00249 
00250 #define GAN_REP3_ABS(a,b,c,p1,p2,p3,q1,q2,q3)\
00251            (a p1 b q1 c, a p2 b q2 c, a p3 b q3 c)
00252 #define GAN_REP3_AAS(a,b,c,p1,p2,p3) GAN_REP3_ABS(a,b,c,p1,p2,p3,p1,p2,p3)
00253 #define GAN_REP3_AAS_C(a,b,c) GAN_REP3_AAS(a,b,c,x,y,z)
00254 
00255 #define GAN_REP3_AB(a,b,p1,p2,p3,q1,q2,q3)\
00256            (a p1 b q1, a p2 b q2, a p3 b q3)
00257 #define GAN_REP3_AA(a,b,p1,p2,p3) GAN_REP3_AB(a,b,p1,p2,p3,p1,p2,p3)
00258 #define GAN_REP3_AA_C(a,b) GAN_REP3_AA(a,b,x,y,z)
00259 
00260 #define GAN_REP3_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3)\
00261            (a p1 b q1 c r1 d, a p2 b q2 c r2 d, a p3 b q3 c r3 d)
00262 #define GAN_REP3_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3)\
00263            (a p1 b q1 c r1, a p2 b q2 c r2, a p3 b q3 c r3)
00264 #define GAN_REP3_AAA(a,b,c,p1,p2,p3)\
00265         GAN_REP3_ABC(a,b,c,p1,p2,p3,p1,p2,p3,p1,p2,p3)
00266 #define GAN_REP3_AAA_C(a,b,c) GAN_REP3_AAA(a,b,c,x,y,z)
00267 
00268 #define GAN_REP3_OP_AB(a,b,p1,p2,p3,q1,q2,q3,op)\
00269            (a p1 b q1 op a p2 b q2 op a p3 b q3)
00270 #define GAN_REP3_OP_AA(a,b,p1,p2,p3,op)\
00271            GAN_REP3_OP_AB(a,b,p1,p2,p3,p1,p2,p3,op)
00272 #define GAN_REP3_OP_AA_C(a,b,op) GAN_REP3_OP_AA(a,b,x,y,z,op)
00273 
00274 #ifdef __cplusplus
00275 }
00276 #endif
00277 
00278 #endif /* #ifndef _GAN_REPEAT3_H */
00279 
00292 /* This library is free software; you can redistribute it and/or
00293    modify it under the terms of the GNU Lesser General Public
00294    License as published by the Free Software Foundation; either
00295    version 2.1 of the License, or (at your option) any later version.
00296 
00297    This library is distributed in the hope that it will be useful,
00298    but WITHOUT ANY WARRANTY; without even the implied warranty of
00299    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00300    Lesser General Public License for more details.
00301 
00302    You should have received a copy of the GNU Lesser General Public
00303    License along with this library; if not, write to the Free Software
00304    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00305 */
00306 
00307 #ifndef _GAN_REPEAT4_H
00308 #define _GAN_REPEAT4_H
00309 
00310 #ifdef __cplusplus
00311 extern "C" {
00312 #endif
00313 
00314 /* macros for constructing four-fold repetitions */
00315 #define GAN_REP4_AS(a,b,p1,p2,p3,p4) (a p1 b, a p2 b, a p3 b, a p4 b)
00316 #define GAN_REP4_AS_C(a,b) GAN_REP4_AS(a,b,x,y,z,w)
00317 #define GAN_REP4_A(a,p1,p2,p3,p4) (a p1, a p2, a p3, a p4)
00318 #define GAN_REP4_A_C(a) GAN_REP4_A(a,x,y,z,w)
00319 
00320 #define GAN_FREP4_A(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00321     (a p1 b q1, a p2 b q2,\
00322      a p3 b q3, a p4 b q4)
00323 #define GAN_FREP4_A_C(a,b,p1,p2,p3,p4) GAN_FREP4_A(a,b,x,y,z,w,p1,p2,p3,p4)
00324 
00325 #define GAN_REP4_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00326            (a p1 b q1 c, a p2 b q2 c, a p3 b q3 c, a p4 b q4 c)
00327 #define GAN_REP4_AAS(a,b,c,p1,p2,p3,p4)\
00328            GAN_REP4_ABS(a,b,c,p1,p2,p3,p4,p1,p2,p3,p4)
00329 #define GAN_REP4_AAS_C(a,b,c) GAN_REP4_AAS(a,b,c,x,y,z,w)
00330 
00331 #define GAN_REP4_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00332            (a p1 b q1, a p2 b q2, a p3 b q3, a p4 b q4)
00333 #define GAN_REP4_AA(a,b,p1,p2,p3,p4)\
00334            GAN_REP4_AB(a,b,p1,p2,p3,p4,p1,p2,p3,p4)
00335 #define GAN_REP4_AA_C(a,b) GAN_REP4_AA(a,b,x,y,z,w)
00336 
00337 #define GAN_REP4_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4)\
00338      (a p1 b q1 c r1 d, a p2 b q2 c r2 d, a p3 b q3 c r3 d, a p4 b q4 c r4 d)
00339 #define GAN_REP4_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4)\
00340      (a p1 b q1 c r1, a p2 b q2 c r2, a p3 b q3 c r3, a p4 b q4 c r4)
00341 #define GAN_REP4_AAA(a,b,c,p1,p2,p3,p4)\
00342            GAN_REP4_ABC(a,b,c,p1,p2,p3,p4,p1,p2,p3,p4,p1,p2,p3,p4)
00343 #define GAN_REP4_AAA_C(a,b,c) GAN_REP4_AAA(a,b,c,x,y,z,w)
00344 
00345 #define GAN_REP4_OP_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,op)\
00346         (a p1 b q1 op a p2 b q2 op a p3 b q3 op a p4 b q4)
00347 #define GAN_REP4_OP_AA(a,b,p1,p2,p3,p4,op)\
00348            GAN_REP4_OP_AB(a,b,p1,p2,p3,p4,p1,p2,p3,p4,op)
00349 #define GAN_REP4_OP_AA_C(a,b,op) GAN_REP4_OP_AA(a,b,x,y,z,w,op)
00350 
00351 #ifdef __cplusplus
00352 }
00353 #endif
00354 
00355 #endif /* #ifndef _GAN_REPEAT4_H */
00356 
00357 #ifdef __cplusplus
00358 extern "C" {
00359 #endif
00360 
00361 /* macros for constructing dual two-fold repetitions */
00362 
00363 #define GAN_FREP44_A(a,b,p1,p2,p3,p4,q1,q2,q3,q4,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)\
00364 (GAN_FREP4_A(a,b,p1##q1,p1##q2,p1##q3,p1##q4,r11,r12,r13,r14),\
00365  GAN_FREP4_A(a,b,p2##q1,p2##q2,p2##q3,p2##q4,r21,r22,r23,r24),\
00366  GAN_FREP4_A(a,b,p3##q1,p3##q2,p3##q3,p3##q4,r31,r32,r33,r34),\
00367  GAN_FREP4_A(a,b,p4##q1,p4##q2,p4##q3,p4##q4,r41,r42,r43,r44))
00368 #define GAN_FREP44_A_C(a,b,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44) \
00369         GAN_FREP44_A(a,b,x,y,z,w,x,y,z,w,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
00370 
00371 /* most general macros */
00372 #define GAN_REP44_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4,t1,t2,t3,t4,u1,u2,u3,u4)\
00373  (GAN_REP4_ABCS(a,b,c,d,p1##q1,p1##q2,p1##q3,p1##q4,\
00374                         r1##s1,r1##s2,r1##s3,r1##s4,\
00375                         t1##u1,t1##u2,t1##u3,t1##u4),\
00376   GAN_REP4_ABCS(a,b,c,d,p2##q1,p2##q2,p2##q3,p2##q4,\
00377                         r2##s1,r2##s2,r2##s3,r2##s4,\
00378                         t2##u1,t2##u2,t2##u3,t2##u4),\
00379   GAN_REP4_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,p3##q4,\
00380                         r3##s1,r3##s2,r3##s3,r3##s4,\
00381                         t3##u1,t3##u2,t3##u3,t3##u4),\
00382   GAN_REP4_ABCS(a,b,c,d,p4##q1,p4##q2,p4##q3,p4##q4,\
00383                         r4##s1,r4##s2,r4##s3,r4##s4,\
00384                         t4##u1,t4##u2,t4##u3,t4##u4))
00385 #define GAN_REP44_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4,t1,t2,t3,t4,u1,u2,u3,u4)\
00386  (GAN_REP4_ABC(a,b,c,p1##q1,p1##q2,p1##q3,p1##q4,\
00387                      r1##s1,r1##s2,r1##s3,r1##s4,\
00388                      t1##u1,t1##u2,t1##u3,t1##u4),\
00389   GAN_REP4_ABC(a,b,c,p2##q1,p2##q2,p2##q3,p2##q4,\
00390                      r2##s1,r2##s2,r2##s3,r2##s4,\
00391                      t2##u1,t2##u2,t2##u3,t2##u4),\
00392   GAN_REP4_ABC(a,b,c,p3##q1,p3##q2,p3##q3,p3##q4,\
00393                      r3##s1,r3##s2,r3##s3,r3##s4,\
00394                      t3##u1,t3##u2,t3##u3,t3##u4),\
00395   GAN_REP4_ABC(a,b,c,p4##q1,p4##q2,p4##q3,p4##q4,\
00396                      r4##s1,r4##s2,r4##s3,r4##s4,\
00397                      t4##u1,t4##u2,t4##u3,t4##u4))
00398 
00399 #define GAN_REP44_AAAS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4)\
00400    GAN_REP44_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00401 #define GAN_REP44_AAA(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00402    GAN_REP44_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00403 
00404 #define GAN_REP44_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4)\
00405  (GAN_REP4_ABS(a,b,c,p1##q1,p1##q2,p1##q3,p1##q4,\
00406                      r1##s1,r1##s2,r1##s3,r1##s4),\
00407   GAN_REP4_ABS(a,b,c,p2##q1,p2##q2,p2##q3,p2##q4,\
00408                      r2##s1,r2##s2,r2##s3,r2##s4),\
00409   GAN_REP4_ABS(a,b,c,p3##q1,p3##q2,p3##q3,p3##q4,\
00410                      r3##s1,r3##s2,r3##s3,r3##s4),\
00411   GAN_REP4_ABS(a,b,c,p4##q1,p4##q2,p4##q3,p4##q4,\
00412                      r4##s1,r4##s2,r4##s3,r4##s4))
00413 #define GAN_REP44_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4)\
00414  (GAN_REP4_AB(a,b,p1##q1,p1##q2,p1##q3,p1##q4,\
00415                   r1##s1,r1##s2,r1##s3,r1##s4),\
00416   GAN_REP4_AB(a,b,p2##q1,p2##q2,p2##q3,p2##q4,\
00417                   r2##s1,r2##s2,r2##s3,r2##s4),\
00418   GAN_REP4_AB(a,b,p3##q1,p3##q2,p3##q3,p3##q4,\
00419                   r3##s1,r3##s2,r3##s3,r3##s4),\
00420   GAN_REP4_AB(a,b,p4##q1,p4##q2,p4##q3,p4##q4,\
00421                   r4##s1,r4##s2,r4##s3,r4##s4))
00422 
00423 #define GAN_REP44_AAS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00424            GAN_REP44_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00425 #define GAN_REP44_AA(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00426             GAN_REP44_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00427 
00428 #define GAN_REP44_AS(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00429  (GAN_REP4_AS(a,b,p1##q1,p1##q2,p1##q3,p1##q4),\
00430   GAN_REP4_AS(a,b,p2##q1,p2##q2,p2##q3,p2##q4),\
00431   GAN_REP4_AS(a,b,p3##q1,p3##q2,p3##q3,p3##q4),\
00432   GAN_REP4_AS(a,b,p4##q1,p4##q2,p4##q3,p4##q4))
00433 #define GAN_REP44_A(a,p1,p2,p3,p4,q1,q2,q3,q4)\
00434  (GAN_REP4_A(a,p1##q1,p1##q2,p1##q3,p1##q4),\
00435   GAN_REP4_A(a,p2##q1,p2##q2,p2##q3,p2##q4),\
00436   GAN_REP4_A(a,p3##q1,p3##q2,p3##q3,p3##q4),\
00437   GAN_REP4_A(a,p4##q1,p4##q2,p4##q3,p4##q4))
00438 
00439 /* macros specific to xx, xy etc coordinates */
00440 #define GAN_REP44_AS_C(a,b) GAN_REP44_AS(a,b,x,y,z,w,x,y,z,w)
00441 #define GAN_REP44_AAS_C(a,b,c) GAN_REP44_AAS(a,b,c,x,y,z,w,x,y,z,w)
00442 #define GAN_REP44_AAAS_C(a,b,c,d) GAN_REP44_AAAS(a,b,c,d,x,y,z,w,x,y,z,w)
00443 #define GAN_REP44_A_C(a) GAN_REP44_A(a,x,y,z,w,x,y,z,w)
00444 #define GAN_REP44_AA_C(a,b) GAN_REP44_AA(a,b,x,y,z,w,x,y,z,w)
00445 #define GAN_REP44_AAA_C(a,b,c) GAN_REP44_AAA(a,b,c,x,y,z,w,x,y,z,w)
00446 
00447 /* macro for transpose operation */
00448 #define GAN_REP44_AAT(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00449  (GAN_REP4_AB(a,b,p1##q1,p1##q2,p1##q3,p1##q4,p1##q1,p2##q1,p3##q1,p4##q1),\
00450   GAN_REP4_AB(a,b,p2##q1,p2##q2,p2##q3,p2##q4,p1##q2,p2##q2,p3##q2,p4##q2),\
00451   GAN_REP4_AB(a,b,p3##q1,p3##q2,p3##q3,p3##q4,p1##q3,p2##q3,p3##q3,p4##q3),\
00452   GAN_REP4_AB(a,b,p4##q1,p4##q2,p4##q3,p4##q4,p1##q4,p2##q4,p3##q4,p4##q4))
00453 #define GAN_REP44_AAT_C(a,b) GAN_REP44_AAT(a,b,x,y,z,w,x,y,z,w)
00454 
00455 /* macros for operations on lower triangle of matrices only */
00456 #define GAN_FREP44L_A(a,b,p1,p2,p3,p4,q1,q2,q3,q4,r11,r21,r22,r31,r32,r33,r41,r42,r43,r44)\
00457  (GAN_FREP1_A(a,b,p1##q1,r11),\
00458   GAN_FREP2_A(a,b,p2##q1,p2##q2,r21,r22),\
00459   GAN_FREP3_A(a,b,p3##q1,p3##q2,p3##q3,r31,r32,r33),\
00460   GAN_FREP4_A(a,b,p4##q1,p4##q2,p4##q3,p4##q4,r41,r42,r43,r44))
00461 #define GAN_FREP44L_A_C(a,b,r11,r21,r22,r31,r32,r33,r41,r42,r43,r44) \
00462            GAN_FREP44L_A(a,b,x,y,z,w,x,y,z,w,r11,r21,r22,r31,r32,r33,r41,r42,r43,r44)
00463 
00464 #define GAN_REP44L_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4,t1,t2,t3,t4,u1,u2,u3,u4)\
00465  (GAN_REP1_ABCS(a,b,c,d,p1##q1,r1##s1,t1##u1),\
00466   GAN_REP2_ABCS(a,b,c,d,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2),\
00467   GAN_REP3_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3),\
00468   GAN_REP4_ABCS(a,b,c,d,p4##q1,p4##q2,p4##q3,p4##q4,r4##s1,r4##s2,r4##s3,r4##s4,t4##u1,t4##u2,t4##u3,t4##u4))
00469 #define GAN_REP44L_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4,t1,t2,t3,t4,u1,u2,u3,u4)\
00470  (GAN_REP1_ABC(a,b,c,p1##q1,r1##s1,t1##u1),\
00471   GAN_REP2_ABC(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2),\
00472   GAN_REP3_ABC(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3),\
00473   GAN_REP4_ABC(a,b,c,p4##q1,p4##q2,p4##q3,p4##q4,r4##s1,r4##s2,r4##s3,r4##s4,t4##u1,t4##u2,t4##u3,t4##u4))
00474 #define GAN_REP44L_AAAS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4)\
00475            GAN_REP44L_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00476 #define GAN_REP44L_AAA(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00477            GAN_REP44L_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00478 #define GAN_REP44L_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4)\
00479  (GAN_REP1_ABS(a,b,c,p1##q1,r1##s1),\
00480   GAN_REP2_ABS(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2),\
00481   GAN_REP3_ABS(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3),\
00482   GAN_REP4_ABS(a,b,c,p4##q1,p4##q2,p4##q3,p4##q4,r4##s1,r4##s2,r4##s3,r4##s4))
00483 #define GAN_REP44L_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4,s1,s2,s3,s4)\
00484  (GAN_REP1_AB(a,b,p1##q1,r1##s1),\
00485   GAN_REP2_AB(a,b,p2##q1,p2##q2,r2##s1,r2##s2),\
00486   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3),\
00487   GAN_REP4_AB(a,b,p4##q1,p4##q2,p4##q3,p4##q4,r4##s1,r4##s2,r4##s3,r4##s4))
00488 #define GAN_REP44L_AAS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00489           GAN_REP44L_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00490 #define GAN_REP44L_AA(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00491            GAN_REP44L_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,p1,p2,p3,p4,q1,q2,q3,q4)
00492 #define GAN_REP44L_AS(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00493  (GAN_REP1_AS(a,b,p1##q1),\
00494   GAN_REP2_AS(a,b,p2##q1,p2##q2),\
00495   GAN_REP3_AS(a,b,p3##q1,p3##q2,p3##q3),\
00496   GAN_REP4_AS(a,b,p4##q1,p4##q2,p4##q3,p4##q4))
00497 #define GAN_REP44L_A(a,p1,p2,p3,p4,q1,q2,q3,q4)\
00498  (GAN_REP1_A(a,p1##q1),\
00499   GAN_REP2_A(a,p2##q1,p2##q2),\
00500   GAN_REP3_A(a,p3##q1,p3##q2,p3##q3),\
00501   GAN_REP4_A(a,p4##q1,p4##q2,p4##q3,p4##q4))
00502 #define GAN_REP44L_AS_C(a,b) GAN_REP44L_AS(a,b,x,y,z,w,x,y,z,w)
00503 #define GAN_REP44L_AAS_C(a,b,c) GAN_REP44L_AAS(a,b,c,x,y,z,w,x,y,z,w)
00504 #define GAN_REP44L_AAAS_C(a,b,c,d) GAN_REP44L_AAAS(a,b,c,d,x,y,z,w,x,y,z,w)
00505 #define GAN_REP44L_A_C(a) GAN_REP44L_A(a,x,y,z,w,x,y,z,w)
00506 #define GAN_REP44L_AA_C(a,b) GAN_REP44L_AA(a,b,x,y,z,w,x,y,z,w)
00507 #define GAN_REP44L_AAA_C(a,b,c) GAN_REP44L_AAA(a,b,c,x,y,z,w,x,y,z,w)
00508 #define GAN_FREP44L_A_C(a,b,r11,r21,r22,r31,r32,r33,r41,r42,r43,r44)\
00509            GAN_FREP44L_A(a,b,x,y,z,w,x,y,z,w,r11,r21,r22,r31,r32,r33,r41,r42,r43,r44)
00510 
00511 #ifdef __cplusplus
00512 }
00513 #endif
00514 
00515 #endif /* #ifndef _GAN_REPEAT44_H */
00516 #include <gandalf/linalg/4vectorf.h>
00517 #include <gandalf/linalg/3x3matrixf.h>
00531 /* This library is free software; you can redistribute it and/or
00532    modify it under the terms of the GNU Lesser General Public
00533    License as published by the Free Software Foundation; either
00534    version 2.1 of the License, or (at your option) any later version.
00535 
00536    This library is distributed in the hope that it will be useful,
00537    but WITHOUT ANY WARRANTY; without even the implied warranty of
00538    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00539    Lesser General Public License for more details.
00540 
00541    You should have received a copy of the GNU Lesser General Public
00542    License along with this library; if not, write to the Free Software
00543    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00544 */
00545 
00546 #endif /* #ifndef _GAN_MATVECF_MACROS_H */
00547 #include <gandalf/linalg/matf_gen.h>
00548 #include <gandalf/linalg/matf_square.h>
00549 
00550 #ifdef __cplusplus
00551 extern "C" {
00552 #endif
00553 
00569 
00570 typedef struct Gan_Matrix44_f
00571 {
00572    float xx, xy, xz, xw,
00573          yx, yy, yz, yw,
00574          zx, zy, zz, zw,
00575          wx, wy, wz, ww;
00576 } Gan_Matrix44_f;
00577 
00578 #ifndef NDEBUG
00579 
00580 typedef enum { GAN_SYMMETRIC_MATRIX44_F, GAN_LOWER_TRI_MATRIX44_F }
00581  Gan_SquMatrix44Type_f;
00582 #endif /* #ifndef NDEBUG */
00583 
00585 typedef struct Gan_SquMatrix44_f
00586 {
00587 #ifndef NDEBUG
00588    /* square matrix type, for setting and checking in debug mode */
00589    Gan_SquMatrix44Type_f type;
00590 #endif /* #ifndef NDEBUG */
00591 
00592    /* matrix data */
00593    float xx,
00594          yx, yy,
00595          zx, zy, zz,
00596          wx, wy, wz, ww;
00597 } Gan_SquMatrix44_f;
00598 
00599 /* matrix definitions specific to 4x4 matrices */
00600 #define GAN_ST44F_FILL(A,t,XX,YX,YY,ZX,ZY,ZZ,WX,WY,WZ,WW)\
00601     (GAN_TEST_OP1(A,Gan_SquMatrix44_f),gan_eval((A)->type=t),\
00602     GAN_FREP44L_A_C((A)->,=,(XX),(YX),(YY),(ZX),(ZY),(ZZ),(WX),(WY),(WZ),(WW)))
00603 #define GAN_ST44F_IDENT(A,t)\
00604            (GAN_TEST_OP1(A,Gan_SquMatrix44_f),gan_eval((A)->type=t),\
00605             GAN_FREP44L_A_C((A)->,=,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0))
00606 
00607 /* generic matrix multiply operations */
00608 #define GAN_MAT44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00609  (a p1 = GAN_REP4_OP_AB(b,* c,xx,xy,xz,xw,q1,q2,q3,q4,+),\
00610   a p2 = GAN_REP4_OP_AB(b,* c,yx,yy,yz,yw,q1,q2,q3,q4,+),\
00611   a p3 = GAN_REP4_OP_AB(b,* c,zx,zy,zz,zw,q1,q2,q3,q4,+),\
00612   a p4 = GAN_REP4_OP_AB(b,* c,wx,wy,wz,ww,q1,q2,q3,q4,+))
00613 #define GAN_MAT44TF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00614  (a p1 = GAN_REP4_OP_AB(b,* c,xx,yx,zx,wx,q1,q2,q3,q4,+),\
00615   a p2 = GAN_REP4_OP_AB(b,* c,xy,yy,zy,wy,q1,q2,q3,q4,+),\
00616   a p3 = GAN_REP4_OP_AB(b,* c,xz,yz,zz,wz,q1,q2,q3,q4,+),\
00617   a p4 = GAN_REP4_OP_AB(b,* c,xw,yw,zw,ww,q1,q2,q3,q4,+))
00618 
00619 /* symmetric matrix multiply operation */
00620 #define GAN_SYM44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00621  (a p1 = GAN_REP4_OP_AB(b,* c,xx,yx,zx,wx,q1,q2,q3,q4,+),\
00622   a p2 = GAN_REP4_OP_AB(b,* c,yx,yy,zy,wy,q1,q2,q3,q4,+),\
00623   a p3 = GAN_REP4_OP_AB(b,* c,zx,zy,zz,wz,q1,q2,q3,q4,+),\
00624   a p4 = GAN_REP4_OP_AB(b,* c,wx,wy,wz,ww,q1,q2,q3,q4,+))
00625 
00626 /* lower triangular matrix multiply operations */
00627 #define GAN_LOW44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00628  (a p4 = GAN_REP4_OP_AB(b,* c,wx,wy,wz,ww,q1,q2,q3,q4,+),\
00629   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+),\
00630   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00631   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00632 #define GAN_LOW44IF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00633  (a p1 =  c q1 / b xx,\
00634   a p2 = (c q2 - b yx * a p1) / b yy,\
00635   a p3 = (c q3 - b zx * a p1 - b zy * a p2) / b zz,\
00636   a p4 = (c q4 - b wx * a p1 - b wy * a p2 - b wz * a p3) / b ww)
00637 
00638 /* upper triangular matrix multiply operations */
00639 #define GAN_UPP44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00640  (a p1 = GAN_REP4_OP_AB(b,* c,xx,yx,zx,wx,q1,q2,q3,q4,+),\
00641   a p2 = GAN_REP3_OP_AB(b,* c,yy,zy,wy,q2,q3,q4,+),\
00642   a p3 = GAN_REP2_OP_AB(b,* c,zz,wz,q3,q4,+),\
00643   a p4 = GAN_REP1_OP_AB(b,* c,ww,q4,+))
00644 #define GAN_UPP44IF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00645  (a p4 =  c q4 / b ww,\
00646   a p3 = (c q3 - b wz * a p4) / b zz,\
00647   a p2 = (c q2 - b zy * a p3 - b wy * a p4) / b yy,\
00648   a p1 = (c q1 - b yx * a p2 - b zx * a p3 - b wx * a p4) / b xx)
00649 
00650 /* symmetric/lower triangular square matrix definitions */
00651 #define GAN_ST44F_ZERO(A,t)\
00652            (GAN_TEST_OP1(A,Gan_SquMatrix44_f), gan_eval((A)->type=t),\
00653             GAN_REP44L_AS_C((A)->,=0.0))
00654 #define GAN_ST44F_COPY(A,B,t)\
00655            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00656             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00657             GAN_REP44L_AA_C((B)->,=(A)->))
00658 #define GAN_ST44F_SCALE(A,a,B,t)\
00659            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00660             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00661             GAN_REP44L_AAS_C((B)->,=(A)->,*(a)))
00662 #define GAN_ST44F_DIVIDE(A,a,B,t)\
00663            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00664             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00665             GAN_REP44L_AAS_C((B)->,=(A)->,/(a)))
00666 #define GAN_ST44F_NEGATE(A,B,t)\
00667            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00668             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00669             GAN_REP44L_AA_C((B)->,=-(A)->))
00670 #define GAN_ST44F_ADD(A,B,C,t)\
00671          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix44_f,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00672           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00673           GAN_REP44L_AAA_C((C)->,=(A)->,+(B)->))
00674 #define GAN_ST44F_SUB(A,B,C,t)\
00675          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix44_f,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00676           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00677           GAN_REP44L_AAA_C((C)->,=(A)->,-(B)->))
00678 
00679 /* declare functions specific to generic 4x4 matrices */
00693 /* This library is free software; you can redistribute it and/or
00694    modify it under the terms of the GNU Lesser General Public
00695    License as published by the Free Software Foundation; either
00696    version 2.1 of the License, or (at your option) any later version.
00697 
00698    This library is distributed in the hope that it will be useful,
00699    but WITHOUT ANY WARRANTY; without even the implied warranty of
00700    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00701    Lesser General Public License for more details.
00702 
00703    You should have received a copy of the GNU Lesser General Public
00704    License along with this library; if not, write to the Free Software
00705    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00706 */
00707 
00708 #ifndef _GAN_4X4MATF_H
00709 
00726  Gan_Matrix44_f *gan_mat44f_fill_q ( Gan_Matrix44_f *A,
00727                                     float XX, float XY, float XZ, float XW,
00728                                     float YX, float YY, float YZ, float YW,
00729                                     float ZX, float ZY, float ZZ, float ZW,
00730                                     float WX, float WY, float WZ, float WW );
00731 
00753  void gan_mat44f_get_rows_q ( const Gan_Matrix44_f *A,
00754                              Gan_Vector4_f *p, Gan_Vector4_f *q,
00755                              Gan_Vector4_f *r, Gan_Vector4_f *s );
00756 
00768  void gan_mat44f_get_cols_q ( const Gan_Matrix44_f *A,
00769                              Gan_Vector4_f *p, Gan_Vector4_f *q,
00770                              Gan_Vector4_f *r, Gan_Vector4_f *s );
00771 
00779  Gan_Matrix33_f *gan_mat44f_get_m33tl_q ( const Gan_Matrix44_f *A, Gan_Matrix33_f *B );
00780 
00788  Gan_Vector3_f *gan_mat44f_get_v3tr_q ( const Gan_Matrix44_f *A, Gan_Vector3_f *p );
00789 
00803  void gan_mat44f_get_parts_q ( const Gan_Matrix44_f *A, Gan_Matrix33_f *B,
00804                               Gan_Vector3_f *p, Gan_Vector3_f *q, float *s );
00805 
00818  void gan_mat44f_get_blocks_q ( const Gan_Matrix44_f *M,
00819                                Gan_Matrix22_f *A, Gan_Matrix22_f *B,
00820                                Gan_Matrix22_f *C, Gan_Matrix22_f *D );
00821 
00844  Gan_Matrix44_f *gan_mat44f_set_parts_q ( Gan_Matrix44_f *A,
00845                                          const Gan_Matrix33_f *B, const Gan_Vector3_f *p,
00846                                          const Gan_Vector3_f *q, float s );
00847 
00861  Gan_Matrix44_f *gan_mat44f_set_blocks_q ( Gan_Matrix44_f *M,
00862                                           const Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
00863                                           const Gan_Matrix22_f *C, const Gan_Matrix22_f *D );
00864 
00870 #endif /* #ifndef _GAN_4X4MATF_H */
00871 
00872 #define GAN_MATTYPE Gan_Matrix44_f
00873 #define GAN_MATRIX_TYPE Gan_Matrix_f
00874 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00875 #define GAN_VECTOR_TYPE Gan_Vector_f
00876 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00877 #define GAN_REALTYPE float
00878 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
00879 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
00880 #define GAN_VECTYPE1 Gan_Vector4_f
00881 #define GAN_VECTYPE2 Gan_Vector4_f
00882 #define GAN_MATTYPEL Gan_Matrix44_f
00883 #define GAN_MATTYPER Gan_Matrix44_f
00884 #define GAN_SQUMATTYPEL Gan_SquMatrix44_f
00885 #define GAN_SQUMATTYPER Gan_SquMatrix44_f
00886 #define GAN_MAT_FPRINT                     gan_mat44f_fprint
00887 #define GAN_MAT_PRINT                      gan_mat44f_print
00888 #define GAN_MAT_FSCANF                     gan_mat44f_fscanf
00889 #define GAN_MAT_FWRITE                     gan_mat44f_fwrite
00890 #define GAN_MAT_FREAD                      gan_mat44f_fread
00891 #define GAN_MAT_ZERO_Q                     gan_mat44f_zero_q
00892 #define GAN_MAT_ZERO_S                     gan_mat44f_zero_s
00893 #define GAN_MAT_COPY_Q                     gan_mat44f_copy_q
00894 #define GAN_MAT_COPY_S                     gan_mat44f_copy_s
00895 #define GAN_MAT_SCALE_Q                    gan_mat44f_scale_q
00896 #define GAN_MAT_SCALE_I                    gan_mat44f_scale_i
00897 #define GAN_MAT_SCALE_S                    gan_mat44f_scale_s
00898 #define GAN_MAT_DIVIDE_Q                   gan_mat44f_divide_q
00899 #define GAN_MAT_DIVIDE_I                   gan_mat44f_divide_i
00900 #define GAN_MAT_DIVIDE_S                   gan_mat44f_divide_s
00901 #define GAN_MAT_NEGATE_Q                   gan_mat44f_negate_q
00902 #define GAN_MAT_NEGATE_I                   gan_mat44f_negate_i
00903 #define GAN_MAT_NEGATE_S                   gan_mat44f_negate_s
00904 #define GAN_MAT_UNIT_Q                     gan_mat44f_unit_q
00905 #define GAN_MAT_UNIT_I                     gan_mat44f_unit_i
00906 #define GAN_MAT_UNIT_S                     gan_mat44f_unit_s
00907 #define GAN_MAT_ADD_Q                      gan_mat44f_add_q
00908 #define GAN_MAT_ADD_I1                     gan_mat44f_add_i1
00909 #define GAN_MAT_ADD_I2                     gan_mat44f_add_i2
00910 #define GAN_MAT_INCREMENT                  gan_mat44f_increment
00911 #define GAN_MAT_ADD_S                      gan_mat44f_add_s
00912 #define GAN_MAT_SUB_Q                      gan_mat44f_sub_q
00913 #define GAN_MAT_SUB_I1                     gan_mat44f_sub_i1
00914 #define GAN_MAT_SUB_I2                     gan_mat44f_sub_i2
00915 #define GAN_MAT_DECREMENT                  gan_mat44f_decrement
00916 #define GAN_MAT_SUB_S                      gan_mat44f_sub_s
00917 #define GAN_VEC_OUTER_Q                    gan_vec44f_outer_q
00918 #define GAN_VEC_OUTER_S                    gan_vec44f_outer_s
00919 #define GAN_MAT_MULTV_Q                    gan_mat44f_multv4_q
00920 #define GAN_MAT_MULTV_S                    gan_mat44f_multv4_s
00921 #define GAN_MATT_MULTV_Q                   gan_mat44Tf_multv4_q
00922 #define GAN_MATT_MULTV_S                   gan_mat44Tf_multv4_s
00923 #define GAN_MAT_LMULTMT_Q                  gan_mat44f_lmultm44T_q
00924 #define GAN_MAT_LMULTMT_S                  gan_mat44f_lmultm44T_s
00925 #define GAN_MAT_RMULTM_Q                   gan_mat44f_rmultm44_q
00926 #define GAN_MAT_RMULTM_S                   gan_mat44f_rmultm44_s
00927 #define GAN_MAT_RMULTMT_Q                  gan_mat44f_rmultm44T_q
00928 #define GAN_MAT_RMULTMT_S                  gan_mat44f_rmultm44T_s
00929 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat44f_lmultm44T_sym_q
00930 #define GAN_MAT_LMULTMT_SYM_S              gan_mat44f_lmultm44T_sym_s
00931 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat44f_rmultm44T_sym_q
00932 #define GAN_MAT_RMULTMT_SYM_S              gan_mat44f_rmultm44T_sym_s
00933 #define GAN_MAT_SLMULTT_Q                  gan_mat44f_slmultT_q
00934 #define GAN_MAT_SLMULTT_S                  gan_mat44f_slmultT_s
00935 #define GAN_MAT_SRMULTT_Q                  gan_mat44f_srmultT_q
00936 #define GAN_MAT_SRMULTT_S                  gan_mat44f_srmultT_s
00937 #define GAN_MAT_LMULTS_Q                   gan_mat44f_lmults44_q
00938 #define GAN_MAT_LMULTS_S                   gan_mat44f_lmults44_s
00939 #define GAN_MAT_RMULTS_Q                   gan_mat44f_rmults44_q
00940 #define GAN_MAT_RMULTS_S                   gan_mat44f_rmults44_s
00941 #define GAN_SYMMATL_LRMULT_Q               gan_symmat44f_lrmultm44T_q
00942 #define GAN_SYMMATL_LRMULT_S               gan_symmat44f_lrmultm44T_s
00943 #define GAN_SYMMATR_LRMULT_Q               gan_symmat44f_lrmultm44_q
00944 #define GAN_SYMMATR_LRMULT_S               gan_symmat44f_lrmultm44_s
00945 #define GAN_MAT_LMULTL_Q                   gan_mat44f_lmultl44_q
00946 #define GAN_MAT_LMULTL_S                   gan_mat44f_lmultl44_s
00947 #define GAN_MAT_LMULTL_I                   gan_mat44f_lmultl44_i
00948 #define GAN_MAT_LMULTLI_Q                  gan_mat44f_lmultl44I_q
00949 #define GAN_MAT_LMULTLI_S                  gan_mat44f_lmultl44I_s
00950 #define GAN_MAT_LMULTLI_I                  gan_mat44f_lmultl44I_i
00951 #define GAN_MAT_LMULTLT_Q                  gan_mat44f_lmultl44T_q
00952 #define GAN_MAT_LMULTLT_S                  gan_mat44f_lmultl44T_s
00953 #define GAN_MAT_LMULTLT_I                  gan_mat44f_lmultl44T_i
00954 #define GAN_MAT_LMULTLIT_Q                 gan_mat44f_lmultl44IT_q
00955 #define GAN_MAT_LMULTLIT_S                 gan_mat44f_lmultl44IT_s
00956 #define GAN_MAT_LMULTLIT_I                 gan_mat44f_lmultl44IT_i
00957 #define GAN_MAT_RMULTL_Q                   gan_mat44f_rmultl44_q
00958 #define GAN_MAT_RMULTL_S                   gan_mat44f_rmultl44_s
00959 #define GAN_MAT_RMULTL_I                   gan_mat44f_rmultl44_i
00960 #define GAN_MAT_RMULTLI_Q                  gan_mat44f_rmultl44I_q
00961 #define GAN_MAT_RMULTLI_S                  gan_mat44f_rmultl44I_s
00962 #define GAN_MAT_RMULTLI_I                  gan_mat44f_rmultl44I_i
00963 #define GAN_MAT_RMULTLT_Q                  gan_mat44f_rmultl44T_q
00964 #define GAN_MAT_RMULTLT_S                  gan_mat44f_rmultl44T_s
00965 #define GAN_MAT_RMULTLT_I                  gan_mat44f_rmultl44T_i
00966 #define GAN_MAT_RMULTLIT_Q                 gan_mat44f_rmultl44IT_q
00967 #define GAN_MAT_RMULTLIT_S                 gan_mat44f_rmultl44IT_s
00968 #define GAN_MAT_RMULTLIT_I                 gan_mat44f_rmultl44IT_i
00969 #define GAN_MAT_SUMSQR_Q                   gan_mat44f_sumsqr_q
00970 #define GAN_MAT_SUMSQR_S                   gan_mat44f_sumsqr_s
00971 #define GAN_MAT_FNORM_Q                    gan_mat44f_Fnorm_q
00972 #define GAN_MAT_FNORM_S                    gan_mat44f_Fnorm_s
00973 #define GAN_MAT_FROM_MAT_Q                 gan_mat44f_from_matf_q
00974 #define GAN_MAT_FROM_MAT_S                 gan_mat44f_from_matf_s
00975 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat44f_from_squmatf_q
00976 #define GAN_MAT_FROM_SQUMAT_S              gan_mat44f_from_squmatf_s
00977 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat44f_from_squmatf_q
00978 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat44f_from_squmatf_s
00979 
00980 #define GAN_SQUMAT_IDENT_Q    gan_mat44f_ident_q
00981 #define GAN_SQUMAT_IDENT_S    gan_mat44f_ident_s
00982 #define GAN_SQUMAT_TPOSE_Q    gan_mat44f_tpose_q
00983 #define GAN_SQUMAT_TPOSE_S    gan_mat44f_tpose_s
00984 #define GAN_SQUMAT_TPOSE_I    gan_mat44f_tpose_i
00985 #define GAN_MAT_SADDT_Q       gan_mat44f_saddT_q
00986 #define GAN_MAT_SADDT_S       gan_mat44f_saddT_s
00987 #define GAN_SQUMAT_INVERT     gan_mat44f_invert
00988 #define GAN_SQUMAT_INVERT_Q   gan_mat44f_invert_q
00989 #define GAN_SQUMAT_INVERT_S   gan_mat44f_invert_s
00990 #define GAN_SQUMAT_INVERT_I   gan_mat44f_invert_i
00991 #define GAN_SQUMAT_ADJOINT_Q  gan_mat44f_adjoint_q
00992 #define GAN_SQUMAT_ADJOINT_S  gan_mat44f_adjoint_s
00993 #define GAN_SQUMAT_ADJOINTT_Q gan_mat44f_adjointT_q
00994 #define GAN_SQUMAT_ADJOINTT_S gan_mat44f_adjointT_s
00995 #define GAN_SQUMAT_DET_Q      gan_mat44f_det_q
00996 #define GAN_SQUMAT_DET_S      gan_mat44f_det_s
00997 #define GAN_SQUMAT_TRACE_Q    gan_mat44f_trace_q
00998 #define GAN_SQUMAT_TRACE_S    gan_mat44f_trace_s
00999 
01000 #ifndef _GAN_4X4MATF_H
01001 #define _GAN_4X4MATF_H
01002 
01003 
01004 #endif /* #ifndef _GAN_4X4MATF_H */
01005 
01018 /* This library is free software; you can redistribute it and/or
01019    modify it under the terms of the GNU Lesser General Public
01020    License as published by the Free Software Foundation; either
01021    version 2.1 of the License, or (at your option) any later version.
01022 
01023    This library is distributed in the hope that it will be useful,
01024    but WITHOUT ANY WARRANTY; without even the implied warranty of
01025    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01026    Lesser General Public License for more details.
01027 
01028    You should have received a copy of the GNU Lesser General Public
01029    License along with this library; if not, write to the Free Software
01030    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01031 */
01032 
01033 /* function declarations for functions common to all small square matrix
01034  * types */
01035 
01036 
01037 
01038 /* documentation for macros defined in individual header files */
01039 
01052  Gan_Matrix44_f *gan_mat44f_ident_q ( Gan_Matrix44_f *A );
01053 
01071  Gan_Matrix44_f *gan_mat44f_tpose_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01072 
01090  Gan_SquMatrix44_f *gan_mat44f_saddT_q ( const Gan_Matrix44_f *A, Gan_SquMatrix44_f *B );
01091 
01122  Gan_Matrix44_f *gan_mat44f_invert_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01123 
01132  Gan_Matrix44_f *gan_mat44f_invert_i ( Gan_Matrix44_f *A );
01133 
01148  float gan_mat44f_det_q ( const Gan_Matrix44_f *A );
01149 
01155  float gan_mat44f_trace_q ( const Gan_Matrix44_f *A );
01156 
01162 #undef GAN_SQUMAT_IDENT_Q
01163 #undef GAN_SQUMAT_IDENT_S
01164 #undef GAN_SQUMAT_TPOSE_Q
01165 #undef GAN_SQUMAT_TPOSE_S
01166 #undef GAN_SQUMAT_TPOSE_I
01167 #undef GAN_MAT_SADDT_Q
01168 #undef GAN_MAT_SADDT_S
01169 #undef GAN_SQUMATI_MULTV_Q
01170 #undef GAN_SQUMATI_MULTV_S
01171 #undef GAN_SQUMATI_MULTV_I
01172 #undef GAN_SQUMATIT_MULTV_Q
01173 #undef GAN_SQUMATIT_MULTV_S
01174 #undef GAN_SQUMATIT_MULTV_I
01175 #undef GAN_SQUMAT_INVERT
01176 #undef GAN_SQUMAT_INVERT_Q
01177 #undef GAN_SQUMAT_INVERT_S
01178 #undef GAN_SQUMAT_INVERT_I
01179 #undef GAN_SQUMAT_ADJOINT_Q
01180 #undef GAN_SQUMAT_ADJOINT_S
01181 #undef GAN_SQUMAT_ADJOINTT_Q
01182 #undef GAN_SQUMAT_ADJOINTT_S
01183 #undef GAN_SQUMAT_DET_Q
01184 #undef GAN_SQUMAT_DET_S
01185 #undef GAN_SQUMAT_TRACE_Q
01186 #undef GAN_SQUMAT_TRACE_S
01187 
01200 /* This library is free software; you can redistribute it and/or
01201    modify it under the terms of the GNU Lesser General Public
01202    License as published by the Free Software Foundation; either
01203    version 2.1 of the License, or (at your option) any later version.
01204 
01205    This library is distributed in the hope that it will be useful,
01206    but WITHOUT ANY WARRANTY; without even the implied warranty of
01207    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01208    Lesser General Public License for more details.
01209 
01210    You should have received a copy of the GNU Lesser General Public
01211    License along with this library; if not, write to the Free Software
01212    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01213 */
01214 
01215 /* function declarations for functions common to all small vector types */
01216 
01217 
01218 
01219 /* documentation for macros defined in individual header files */
01220 
01231  Gan_Matrix44_f *gan_mat44f_zero_q ( const Gan_Matrix44_f *A );
01232 
01249  Gan_Matrix44_f *gan_mat44f_copy_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01250 
01268  Gan_Matrix44_f *gan_mat44f_scale_q ( Gan_Matrix44_f *A, float a,
01269                                Gan_Matrix44_f *B );
01270 
01278  Gan_Matrix44_f *gan_mat44f_scale_i ( Gan_Matrix44_f *A, float a );
01279 
01288  Gan_Matrix44_f *gan_mat44f_divide_q ( Gan_Matrix44_f *A, float a,
01289                                 Gan_Matrix44_f *B );
01290 
01298  Gan_Matrix44_f *gan_mat44f_divide_i ( Gan_Matrix44_f *A, float a );
01299 
01307  Gan_Matrix44_f *gan_mat44f_negate_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01308 
01316  Gan_Matrix44_f *gan_mat44f_negate_i ( Gan_Matrix44_f *A );
01317 
01325  Gan_Matrix44_f *gan_mat44f_unit_i ( Gan_Matrix44_f *A );
01326 
01344  Gan_Matrix44_f *gan_mat44f_add_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B, Gan_Matrix44_f *C );
01345 
01354  Gan_Matrix44_f *gan_mat44f_add_i1 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01355 
01364  Gan_Matrix44_f *gan_mat44f_add_i2 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01365 
01374  Gan_Matrix44_f *gan_mat44f_increment ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01375 
01393  Gan_Matrix44_f *gan_mat44f_sub_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B, Gan_Matrix44_f *C );
01394 
01403  Gan_Matrix44_f *gan_mat44f_sub_i1 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01404 
01413  Gan_Matrix44_f *gan_mat44f_sub_i2 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01414 
01423  Gan_Matrix44_f *gan_mat44f_decrement ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01424 
01442  Gan_Matrix44_f *gan_vec44f_outer_q ( const Gan_Vector4_f *p, const Gan_Vector4_f *q,
01443                                Gan_Matrix44_f *A );
01444 
01453  Gan_Vector4_f *gan_mat44f_multv4_q ( const Gan_Matrix44_f *A, Gan_Vector4_f *p,
01454                                 Gan_Vector4_f *q );
01455 
01456 
01465  Gan_Vector4_f *gan_mat44Tf_multv4_q ( const Gan_Matrix44_f *A, Gan_Vector4_f *p,
01466                                  Gan_Vector4_f *q );
01467 
01468 
01488  Gan_Matrix44_f *gan_mat44f_lmultm44T_q ( Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01489                                  Gan_Matrix44_f *C );
01490 
01500  Gan_Matrix44_f *gan_mat44f_rmultm44_q ( Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01501                                 Gan_Matrix44_f *C );
01502 
01512  Gan_Matrix44_f *gan_mat44f_rmultm44T_q ( Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01513                                  Gan_Matrix44_f *C );
01514 
01526  Gan_SquMatrix44_f *gan_mat44f_lmultm44T_sym_q ( const Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01527                                          Gan_SquMatrix44_f *C );
01528 
01540  Gan_SquMatrix44_f *gan_mat44f_rmultm44T_sym_q ( const Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01541                                          Gan_SquMatrix44_f *C );
01542 
01551  Gan_Matrix44_f *gan_mat44f_lmults44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01552                                 Gan_Matrix44_f *C );
01553 
01562  Gan_Matrix44_f *gan_mat44f_rmults44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01563                                 Gan_Matrix44_f *C );
01564 
01584  Gan_SquMatrix44_f *gan_symmat44f_lrmultm44T_q ( const Gan_SquMatrix44_f *A, const Gan_Matrix44_f *B,
01585                                         const Gan_Matrix44_f *C, Gan_SquMatrix44_f *D );
01586 
01597  Gan_SquMatrix44_f *gan_symmat44f_lrmultm44_q ( const Gan_SquMatrix44_f *A, const Gan_Matrix44_f *B,
01598                                         const Gan_Matrix44_f *C, Gan_SquMatrix44_f *D );
01599 
01618  Gan_Matrix44_f *gan_mat44f_lmultl44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01619                                 Gan_Matrix44_f *C );
01620 
01630  Gan_Matrix44_f *gan_mat44f_lmultl44I_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01631                                  Gan_Matrix44_f *C );
01632 
01642  Gan_Matrix44_f *gan_mat44f_lmultl44T_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01643                                  Gan_Matrix44_f *C );
01644 
01654  Gan_Matrix44_f *gan_mat44f_lmultl44IT_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01655                                   Gan_Matrix44_f *C );
01656 
01666  Gan_Matrix44_f *gan_mat44f_rmultl44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01667                                 Gan_Matrix44_f *C );
01668 
01678  Gan_Matrix44_f *gan_mat44f_rmultl44I_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01679                                  Gan_Matrix44_f *C );
01680 
01690  Gan_Matrix44_f *gan_mat44f_rmultl44T_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01691                                  Gan_Matrix44_f *C );
01692 
01702  Gan_Matrix44_f *gan_mat44f_rmultl44IT_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01703                                   Gan_Matrix44_f *C );
01704 
01714  Gan_Matrix44_f *gan_mat44f_lmultl44_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01715 
01725  Gan_Matrix44_f *gan_mat44f_lmultl44I_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01726 
01736  Gan_Matrix44_f *gan_mat44f_lmultl44T_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01737 
01747  Gan_Matrix44_f *gan_mat44f_lmultl44IT_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01748 
01758  Gan_Matrix44_f *gan_mat44f_rmultl44_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01759 
01769  Gan_Matrix44_f *gan_mat44f_rmultl44I_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01770 
01780  Gan_Matrix44_f *gan_mat44f_rmultl44T_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01781 
01791  Gan_Matrix44_f *gan_mat44f_rmultl44IT_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01792 
01801  Gan_SquMatrix44_f *gan_mat44f_slmultT_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01802 
01803 
01812  Gan_SquMatrix44_f *gan_mat44f_srmultT_q ( const Gan_Matrix44_f *A, Gan_SquMatrix44_f *B );
01813 
01814 
01829  float gan_mat44f_sumsqr_q ( const Gan_Matrix44_f *A );
01830 
01837  float gan_mat44f_Fnorm_q ( const Gan_Matrix44_f *A );
01838 
01848  Gan_Matrix44_f *gan_mat44f_from_matf_q ( const Gan_Matrix_f *A, Gan_Matrix44_f *B );
01849 
01850  Gan_Matrix44_f *gan_mat44f_from_squmatf_q ( const Gan_SquMatrix_f *A, Gan_Matrix44_f *B );
01851 
01852  Gan_SquMatrix44_f *gan_squmat44f_from_squmatf_q ( const Gan_SquMatrix_f *A,
01853                                             Gan_SquMatrix44_f *B );
01854 
01873 /* This library is free software; you can redistribute it and/or
01874    modify it under the terms of the GNU Lesser General Public
01875    License as published by the Free Software Foundation; either
01876    version 2.1 of the License, or (at your option) any later version.
01877 
01878    This library is distributed in the hope that it will be useful,
01879    but WITHOUT ANY WARRANTY; without even the implied warranty of
01880    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01881    Lesser General Public License for more details.
01882 
01883    You should have received a copy of the GNU Lesser General Public
01884    License along with this library; if not, write to the Free Software
01885    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01886 */
01887 
01888 #undef GAN_MATTYPE
01889 #undef GAN_MATRIX_TYPE
01890 #undef GAN_SQUMATRIX_TYPE
01891 #undef GAN_VECTOR_TYPE
01892 #undef GAN_MAT_ELEMENT_TYPE
01893 #undef GAN_REALTYPE
01894 #undef GAN_FWRITE_LENDIAN
01895 #undef GAN_FREAD_LENDIAN
01896 #undef GAN_VECTYPE1
01897 #undef GAN_VECTYPE2
01898 #undef GAN_MATTYPEL
01899 #undef GAN_MATTYPER
01900 #undef GAN_SQUMATTYPEL
01901 #undef GAN_SQUMATTYPER
01902 #undef GAN_FIXED_MATRIX_TYPE
01903 #undef GAN_MAT_FPRINT
01904 #undef GAN_MAT_PRINT
01905 #undef GAN_MAT_FSCANF
01906 #undef GAN_MAT_FWRITE
01907 #undef GAN_MAT_FREAD
01908 #undef GAN_MAT_ZERO_Q
01909 #undef GAN_MAT_ZERO_S
01910 #undef GAN_MAT_COPY_Q
01911 #undef GAN_MAT_COPY_S
01912 #undef GAN_MAT_SCALE_Q
01913 #undef GAN_MAT_SCALE_S
01914 #undef GAN_MAT_SCALE_I
01915 #undef GAN_MAT_DIVIDE_Q
01916 #undef GAN_MAT_DIVIDE_S
01917 #undef GAN_MAT_DIVIDE_I
01918 #undef GAN_MAT_NEGATE_Q
01919 #undef GAN_MAT_NEGATE_S
01920 #undef GAN_MAT_NEGATE_I
01921 #undef GAN_MAT_UNIT_Q
01922 #undef GAN_MAT_UNIT_S
01923 #undef GAN_MAT_UNIT_I
01924 #undef GAN_MAT_ADD_Q
01925 #undef GAN_MAT_ADD_I1
01926 #undef GAN_MAT_ADD_I2
01927 #undef GAN_MAT_INCREMENT
01928 #undef GAN_MAT_ADD_S
01929 #undef GAN_MAT_SUB_Q
01930 #undef GAN_MAT_SUB_I1
01931 #undef GAN_MAT_SUB_I2
01932 #undef GAN_MAT_DECREMENT
01933 #undef GAN_MAT_SUB_S
01934 #undef GAN_VEC_OUTER_Q
01935 #undef GAN_VEC_OUTER_S
01936 #undef GAN_MAT_MULTV_Q
01937 #undef GAN_MAT_MULTV_S
01938 #undef GAN_MAT_MULTV_I
01939 #undef GAN_MATT_MULTV_Q
01940 #undef GAN_MATT_MULTV_S
01941 #undef GAN_MATT_MULTV_I
01942 #undef GAN_MAT_LMULTM_Q
01943 #undef GAN_MAT_LMULTM_S
01944 #undef GAN_MAT_LMULTMT_Q
01945 #undef GAN_MAT_LMULTMT_S
01946 #undef GAN_MAT_RMULTM_Q
01947 #undef GAN_MAT_RMULTM_S
01948 #undef GAN_MAT_RMULTMT_Q
01949 #undef GAN_MAT_RMULTMT_S
01950 #undef GAN_MAT_LMULTMT_SYM_Q
01951 #undef GAN_MAT_LMULTMT_SYM_S
01952 #undef GAN_MAT_RMULTMT_SYM_Q
01953 #undef GAN_MAT_RMULTMT_SYM_S
01954 #undef GAN_MAT_LMULTS_Q
01955 #undef GAN_MAT_LMULTS_S
01956 #undef GAN_MAT_RMULTS_Q
01957 #undef GAN_MAT_RMULTS_S
01958 #undef GAN_SYMMATL_LRMULT_Q
01959 #undef GAN_SYMMATL_LRMULT_S
01960 #undef GAN_SYMMATR_LRMULT_Q
01961 #undef GAN_SYMMATR_LRMULT_S
01962 #undef GAN_MAT_LMULTL_Q
01963 #undef GAN_MAT_LMULTL_S
01964 #undef GAN_MAT_LMULTL_I
01965 #undef GAN_MAT_LMULTLI_Q
01966 #undef GAN_MAT_LMULTLI_S
01967 #undef GAN_MAT_LMULTLI_I
01968 #undef GAN_MAT_LMULTLT_Q
01969 #undef GAN_MAT_LMULTLT_S
01970 #undef GAN_MAT_LMULTLT_I
01971 #undef GAN_MAT_LMULTLIT_Q
01972 #undef GAN_MAT_LMULTLIT_S
01973 #undef GAN_MAT_LMULTLIT_I
01974 #undef GAN_MAT_RMULTL_Q
01975 #undef GAN_MAT_RMULTL_S
01976 #undef GAN_MAT_RMULTL_I
01977 #undef GAN_MAT_RMULTLI_Q
01978 #undef GAN_MAT_RMULTLI_S
01979 #undef GAN_MAT_RMULTLI_I
01980 #undef GAN_MAT_RMULTLT_Q
01981 #undef GAN_MAT_RMULTLT_S
01982 #undef GAN_MAT_RMULTLT_I
01983 #undef GAN_MAT_RMULTLIT_Q
01984 #undef GAN_MAT_RMULTLIT_S
01985 #undef GAN_MAT_RMULTLIT_I
01986 #undef GAN_MAT_SRMULTT_Q
01987 #undef GAN_MAT_SRMULTT_S
01988 #undef GAN_MAT_SRMULTT_I
01989 #undef GAN_MAT_SLMULTT_Q
01990 #undef GAN_MAT_SLMULTT_S
01991 #undef GAN_MAT_SLMULTT_I
01992 #undef GAN_MAT_RMULTLIT_S
01993 #undef GAN_MAT_SUMSQR_Q
01994 #undef GAN_MAT_SUMSQR_S
01995 #undef GAN_MAT_FNORM_Q
01996 #undef GAN_MAT_FNORM_S
01997 #undef GAN_MAT_FROM_MAT_Q
01998 #undef GAN_MAT_FROM_MAT_S
01999 #undef GAN_MAT_FROM_SQUMAT_Q
02000 #undef GAN_MAT_FROM_SQUMAT_S
02001 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02002 #undef GAN_SQUMAT_FROM_SQUMAT_S
02003 
02004 /* declare functions specific to symmetric 4x4 matrices */
02018 /* This library is free software; you can redistribute it and/or
02019    modify it under the terms of the GNU Lesser General Public
02020    License as published by the Free Software Foundation; either
02021    version 2.1 of the License, or (at your option) any later version.
02022 
02023    This library is distributed in the hope that it will be useful,
02024    but WITHOUT ANY WARRANTY; without even the implied warranty of
02025    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02026    Lesser General Public License for more details.
02027 
02028    You should have received a copy of the GNU Lesser General Public
02029    License along with this library; if not, write to the Free Software
02030    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02031 */
02032 
02033 #ifndef _GAN_4X4SYMMATF_H
02034 
02049  Gan_SquMatrix44_f *
02050     gan_symmat44f_fill_q ( Gan_SquMatrix44_f *A,
02051                            float XX,
02052                            float YX, float YY,
02053                            float ZX, float ZY, float ZZ,
02054                            float WX, float WY, float WZ, float WW );
02055 
02077  void gan_symmat44f_get_parts_q ( const Gan_SquMatrix44_f *A,
02078                                  Gan_SquMatrix33_f *B, Gan_Vector3_f *p,
02079                                  float *s);
02080 
02094  void gan_symmat44f_get_blocks_q ( const Gan_SquMatrix44_f *A,
02095                                   Gan_SquMatrix22_f *B, Gan_Matrix22_f *C,
02096                                   Gan_SquMatrix22_f *D );
02097 
02120  Gan_SquMatrix44_f *gan_symmat44f_set_parts_q ( Gan_SquMatrix44_f *A,
02121                                                const Gan_SquMatrix33_f *B,
02122                                                const Gan_Vector3_f *p, float s );
02123 
02137  Gan_SquMatrix44_f *gan_symmat44f_set_blocks_q ( Gan_SquMatrix44_f *A,
02138                                                 const Gan_SquMatrix22_f *B,
02139                                                 const Gan_Matrix22_f *C,
02140                                                 const Gan_SquMatrix22_f *D );
02141 
02147 #endif /* #ifndef _GAN_4X4SYMMATF_H */
02148 
02149 #define GAN_MATTYPE Gan_SquMatrix44_f
02150 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02151 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02152 #define GAN_VECTOR_TYPE Gan_Vector_f
02153 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02154 #define GAN_REALTYPE float
02155 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
02156 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
02157 #define GAN_VECTYPE1 Gan_Vector4_f
02158 #define GAN_VECTYPE2 Gan_Vector4_f
02159 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX44_F
02160 #define GAN_MAT_FPRINT      gan_symmat44f_fprint
02161 #define GAN_MAT_PRINT       gan_symmat44f_print
02162 #define GAN_MAT_FSCANF      gan_symmat44f_fscanf
02163 #define GAN_MAT_FWRITE      gan_symmat44f_fwrite
02164 #define GAN_MAT_FREAD       gan_symmat44f_fread
02165 #define GAN_MAT_ZERO_Q      gan_symmat44f_zero_q
02166 #define GAN_MAT_ZERO_S      gan_symmat44f_zero_s
02167 #define GAN_MAT_COPY_Q      gan_symmat44f_copy_q
02168 #define GAN_MAT_COPY_S      gan_symmat44f_copy_s
02169 #define GAN_MAT_SCALE_Q     gan_symmat44f_scale_q
02170 #define GAN_MAT_SCALE_S     gan_symmat44f_scale_s
02171 #define GAN_MAT_SCALE_I     gan_symmat44f_scale_i
02172 #define GAN_MAT_DIVIDE_Q    gan_symmat44f_divide_q
02173 #define GAN_MAT_DIVIDE_S    gan_symmat44f_divide_s
02174 #define GAN_MAT_DIVIDE_I    gan_symmat44f_divide_i
02175 #define GAN_MAT_NEGATE_Q    gan_symmat44f_negate_q
02176 #define GAN_MAT_NEGATE_S    gan_symmat44f_negate_s
02177 #define GAN_MAT_NEGATE_I    gan_symmat44f_negate_i
02178 #define GAN_MAT_UNIT_Q      gan_symmat44f_unit_q
02179 #define GAN_MAT_UNIT_S      gan_symmat44f_unit_s
02180 #define GAN_MAT_UNIT_I      gan_symmat44f_unit_i
02181 #define GAN_MAT_ADD_Q       gan_symmat44f_add_q
02182 #define GAN_MAT_ADD_I1      gan_symmat44f_add_i1
02183 #define GAN_MAT_ADD_I2      gan_symmat44f_add_i2
02184 #define GAN_MAT_INCREMENT   gan_symmat44f_increment
02185 #define GAN_MAT_ADD_S       gan_symmat44f_add_s
02186 #define GAN_MAT_SUB_Q       gan_symmat44f_sub_q
02187 #define GAN_MAT_SUB_I1      gan_symmat44f_sub_i1
02188 #define GAN_MAT_SUB_I2      gan_symmat44f_sub_i2
02189 #define GAN_MAT_DECREMENT   gan_symmat44f_decrement
02190 #define GAN_MAT_SUB_S       gan_symmat44f_sub_s
02191 #define GAN_MAT_MULTV_Q     gan_symmat44f_multv4_q
02192 #define GAN_MAT_MULTV_S     gan_symmat44f_multv4_s
02193 #define GAN_MAT_SUMSQR_Q    gan_symmat44f_sumsqr_q
02194 #define GAN_MAT_SUMSQR_S    gan_symmat44f_sumsqr_s
02195 #define GAN_MAT_FNORM_Q     gan_symmat44f_Fnorm_q
02196 #define GAN_MAT_FNORM_S     gan_symmat44f_Fnorm_s
02197 
02198 #define GAN_SQUMAT_IDENT_Q    gan_symmat44f_ident_q
02199 #define GAN_SQUMAT_IDENT_S    gan_symmat44f_ident_s
02200 #define GAN_SQUMAT_INVERT     gan_symmat44f_invert
02201 #define GAN_SQUMAT_INVERT_Q   gan_symmat44f_invert_q
02202 #define GAN_SQUMAT_INVERT_S   gan_symmat44f_invert_s
02203 #define GAN_SQUMAT_INVERT_I   gan_symmat44f_invert_i
02204 #define GAN_SQUMAT_DET_Q      gan_symmat44f_det_q
02205 #define GAN_SQUMAT_DET_S      gan_symmat44f_det_s
02206 #define GAN_SQUMAT_TRACE_Q    gan_symmat44f_trace_q
02207 #define GAN_SQUMAT_TRACE_S    gan_symmat44f_trace_s
02208 
02209 #define GAN_VEC_OUTER_SYM_Q gan_vec44f_outer_sym_q
02210 #define GAN_VEC_OUTER_SYM_S gan_vec44f_outer_sym_s
02211 #define GAN_SYMMAT_CHOLESKY   gan_symmat44f_cholesky
02212 #define GAN_SYMMAT_CHOLESKY_Q gan_symmat44f_cholesky_q
02213 #define GAN_SYMMAT_CHOLESKY_S gan_symmat44f_cholesky_s
02214 #define GAN_SYMMAT_CHOLESKY_I gan_symmat44f_cholesky_i
02215 
02216 #ifndef _GAN_4X4SYMMATF_H
02217 #define _GAN_4X4SYMMATF_H
02218 
02219 
02220 #endif /* #ifndef _GAN_4X4SYMMATF_H */
02221 
02234 /* This library is free software; you can redistribute it and/or
02235    modify it under the terms of the GNU Lesser General Public
02236    License as published by the Free Software Foundation; either
02237    version 2.1 of the License, or (at your option) any later version.
02238 
02239    This library is distributed in the hope that it will be useful,
02240    but WITHOUT ANY WARRANTY; without even the implied warranty of
02241    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02242    Lesser General Public License for more details.
02243 
02244    You should have received a copy of the GNU Lesser General Public
02245    License along with this library; if not, write to the Free Software
02246    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02247 */
02248 
02249 /* function declarations for functions common to all small symmetric matrix
02250  * types */
02251 
02252 
02253 
02254 /* documentation for macros defined in individual header files */
02255 
02266  Gan_SquMatrix44_f *gan_vec44f_outer_sym_q ( const Gan_Vector4_f *p, Gan_SquMatrix44_f *A );
02267 
02289  Gan_SquMatrix44_f *gan_symmat44f_cholesky_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02290 
02299  Gan_SquMatrix44_f *gan_symmat44f_cholesky_i ( Gan_SquMatrix44_f *A );
02300 
02306 #undef GAN_VEC_OUTER_SYM_Q
02307 #undef GAN_VEC_OUTER_SYM_S
02308 #undef GAN_SYMMAT_CHOLESKY
02309 #undef GAN_SYMMAT_CHOLESKY_Q
02310 #undef GAN_SYMMAT_CHOLESKY_S
02311 #undef GAN_SYMMAT_CHOLESKY_I
02312 
02325 /* This library is free software; you can redistribute it and/or
02326    modify it under the terms of the GNU Lesser General Public
02327    License as published by the Free Software Foundation; either
02328    version 2.1 of the License, or (at your option) any later version.
02329 
02330    This library is distributed in the hope that it will be useful,
02331    but WITHOUT ANY WARRANTY; without even the implied warranty of
02332    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02333    Lesser General Public License for more details.
02334 
02335    You should have received a copy of the GNU Lesser General Public
02336    License along with this library; if not, write to the Free Software
02337    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02338 */
02339 
02340 /* function declarations for functions common to all small square matrix
02341  * types */
02342 
02343 
02344 
02345 /* documentation for macros defined in individual header files */
02346 
02359  Gan_SquMatrix44_f *gan_symmat44f_ident_q ( Gan_SquMatrix44_f *A );
02360 
02411  Gan_SquMatrix44_f *gan_symmat44f_invert_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02412 
02421  Gan_SquMatrix44_f *gan_symmat44f_invert_i ( Gan_SquMatrix44_f *A );
02422 
02437  float gan_symmat44f_det_q ( const Gan_SquMatrix44_f *A );
02438 
02444  float gan_symmat44f_trace_q ( const Gan_SquMatrix44_f *A );
02445 
02451 #undef GAN_SQUMAT_IDENT_Q
02452 #undef GAN_SQUMAT_IDENT_S
02453 #undef GAN_SQUMAT_TPOSE_Q
02454 #undef GAN_SQUMAT_TPOSE_S
02455 #undef GAN_SQUMAT_TPOSE_I
02456 #undef GAN_MAT_SADDT_Q
02457 #undef GAN_MAT_SADDT_S
02458 #undef GAN_SQUMATI_MULTV_Q
02459 #undef GAN_SQUMATI_MULTV_S
02460 #undef GAN_SQUMATI_MULTV_I
02461 #undef GAN_SQUMATIT_MULTV_Q
02462 #undef GAN_SQUMATIT_MULTV_S
02463 #undef GAN_SQUMATIT_MULTV_I
02464 #undef GAN_SQUMAT_INVERT
02465 #undef GAN_SQUMAT_INVERT_Q
02466 #undef GAN_SQUMAT_INVERT_S
02467 #undef GAN_SQUMAT_INVERT_I
02468 #undef GAN_SQUMAT_ADJOINT_Q
02469 #undef GAN_SQUMAT_ADJOINT_S
02470 #undef GAN_SQUMAT_ADJOINTT_Q
02471 #undef GAN_SQUMAT_ADJOINTT_S
02472 #undef GAN_SQUMAT_DET_Q
02473 #undef GAN_SQUMAT_DET_S
02474 #undef GAN_SQUMAT_TRACE_Q
02475 #undef GAN_SQUMAT_TRACE_S
02476 
02489 /* This library is free software; you can redistribute it and/or
02490    modify it under the terms of the GNU Lesser General Public
02491    License as published by the Free Software Foundation; either
02492    version 2.1 of the License, or (at your option) any later version.
02493 
02494    This library is distributed in the hope that it will be useful,
02495    but WITHOUT ANY WARRANTY; without even the implied warranty of
02496    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02497    Lesser General Public License for more details.
02498 
02499    You should have received a copy of the GNU Lesser General Public
02500    License along with this library; if not, write to the Free Software
02501    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02502 */
02503 
02504 /* function declarations for functions common to all small vector types */
02505 
02506 
02507 
02508 /* documentation for macros defined in individual header files */
02509 
02520  Gan_SquMatrix44_f *gan_symmat44f_zero_q ( const Gan_SquMatrix44_f *A );
02521 
02538  Gan_SquMatrix44_f *gan_symmat44f_copy_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02539 
02557  Gan_SquMatrix44_f *gan_symmat44f_scale_q ( Gan_SquMatrix44_f *A, float a,
02558                                Gan_SquMatrix44_f *B );
02559 
02567  Gan_SquMatrix44_f *gan_symmat44f_scale_i ( Gan_SquMatrix44_f *A, float a );
02568 
02577  Gan_SquMatrix44_f *gan_symmat44f_divide_q ( Gan_SquMatrix44_f *A, float a,
02578                                 Gan_SquMatrix44_f *B );
02579 
02587  Gan_SquMatrix44_f *gan_symmat44f_divide_i ( Gan_SquMatrix44_f *A, float a );
02588 
02596  Gan_SquMatrix44_f *gan_symmat44f_negate_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02597 
02605  Gan_SquMatrix44_f *gan_symmat44f_negate_i ( Gan_SquMatrix44_f *A );
02606 
02614  Gan_SquMatrix44_f *gan_symmat44f_unit_i ( Gan_SquMatrix44_f *A );
02615 
02633  Gan_SquMatrix44_f *gan_symmat44f_add_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
02634 
02643  Gan_SquMatrix44_f *gan_symmat44f_add_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02644 
02653  Gan_SquMatrix44_f *gan_symmat44f_add_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02654 
02663  Gan_SquMatrix44_f *gan_symmat44f_increment ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02664 
02682  Gan_SquMatrix44_f *gan_symmat44f_sub_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
02683 
02692  Gan_SquMatrix44_f *gan_symmat44f_sub_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02693 
02702  Gan_SquMatrix44_f *gan_symmat44f_sub_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02703 
02712  Gan_SquMatrix44_f *gan_symmat44f_decrement ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02713 
02732  Gan_Vector4_f *gan_symmat44f_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
02733                                 Gan_Vector4_f *q );
02734 
02735 
02736 
02737 
02809  float gan_symmat44f_sumsqr_q ( const Gan_SquMatrix44_f *A );
02810 
02817  float gan_symmat44f_Fnorm_q ( const Gan_SquMatrix44_f *A );
02818 
02849 /* This library is free software; you can redistribute it and/or
02850    modify it under the terms of the GNU Lesser General Public
02851    License as published by the Free Software Foundation; either
02852    version 2.1 of the License, or (at your option) any later version.
02853 
02854    This library is distributed in the hope that it will be useful,
02855    but WITHOUT ANY WARRANTY; without even the implied warranty of
02856    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02857    Lesser General Public License for more details.
02858 
02859    You should have received a copy of the GNU Lesser General Public
02860    License along with this library; if not, write to the Free Software
02861    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02862 */
02863 
02864 #undef GAN_MATTYPE
02865 #undef GAN_MATRIX_TYPE
02866 #undef GAN_SQUMATRIX_TYPE
02867 #undef GAN_VECTOR_TYPE
02868 #undef GAN_MAT_ELEMENT_TYPE
02869 #undef GAN_REALTYPE
02870 #undef GAN_FWRITE_LENDIAN
02871 #undef GAN_FREAD_LENDIAN
02872 #undef GAN_VECTYPE1
02873 #undef GAN_VECTYPE2
02874 #undef GAN_MATTYPEL
02875 #undef GAN_MATTYPER
02876 #undef GAN_SQUMATTYPEL
02877 #undef GAN_SQUMATTYPER
02878 #undef GAN_FIXED_MATRIX_TYPE
02879 #undef GAN_MAT_FPRINT
02880 #undef GAN_MAT_PRINT
02881 #undef GAN_MAT_FSCANF
02882 #undef GAN_MAT_FWRITE
02883 #undef GAN_MAT_FREAD
02884 #undef GAN_MAT_ZERO_Q
02885 #undef GAN_MAT_ZERO_S
02886 #undef GAN_MAT_COPY_Q
02887 #undef GAN_MAT_COPY_S
02888 #undef GAN_MAT_SCALE_Q
02889 #undef GAN_MAT_SCALE_S
02890 #undef GAN_MAT_SCALE_I
02891 #undef GAN_MAT_DIVIDE_Q
02892 #undef GAN_MAT_DIVIDE_S
02893 #undef GAN_MAT_DIVIDE_I
02894 #undef GAN_MAT_NEGATE_Q
02895 #undef GAN_MAT_NEGATE_S
02896 #undef GAN_MAT_NEGATE_I
02897 #undef GAN_MAT_UNIT_Q
02898 #undef GAN_MAT_UNIT_S
02899 #undef GAN_MAT_UNIT_I
02900 #undef GAN_MAT_ADD_Q
02901 #undef GAN_MAT_ADD_I1
02902 #undef GAN_MAT_ADD_I2
02903 #undef GAN_MAT_INCREMENT
02904 #undef GAN_MAT_ADD_S
02905 #undef GAN_MAT_SUB_Q
02906 #undef GAN_MAT_SUB_I1
02907 #undef GAN_MAT_SUB_I2
02908 #undef GAN_MAT_DECREMENT
02909 #undef GAN_MAT_SUB_S
02910 #undef GAN_VEC_OUTER_Q
02911 #undef GAN_VEC_OUTER_S
02912 #undef GAN_MAT_MULTV_Q
02913 #undef GAN_MAT_MULTV_S
02914 #undef GAN_MAT_MULTV_I
02915 #undef GAN_MATT_MULTV_Q
02916 #undef GAN_MATT_MULTV_S
02917 #undef GAN_MATT_MULTV_I
02918 #undef GAN_MAT_LMULTM_Q
02919 #undef GAN_MAT_LMULTM_S
02920 #undef GAN_MAT_LMULTMT_Q
02921 #undef GAN_MAT_LMULTMT_S
02922 #undef GAN_MAT_RMULTM_Q
02923 #undef GAN_MAT_RMULTM_S
02924 #undef GAN_MAT_RMULTMT_Q
02925 #undef GAN_MAT_RMULTMT_S
02926 #undef GAN_MAT_LMULTMT_SYM_Q
02927 #undef GAN_MAT_LMULTMT_SYM_S
02928 #undef GAN_MAT_RMULTMT_SYM_Q
02929 #undef GAN_MAT_RMULTMT_SYM_S
02930 #undef GAN_MAT_LMULTS_Q
02931 #undef GAN_MAT_LMULTS_S
02932 #undef GAN_MAT_RMULTS_Q
02933 #undef GAN_MAT_RMULTS_S
02934 #undef GAN_SYMMATL_LRMULT_Q
02935 #undef GAN_SYMMATL_LRMULT_S
02936 #undef GAN_SYMMATR_LRMULT_Q
02937 #undef GAN_SYMMATR_LRMULT_S
02938 #undef GAN_MAT_LMULTL_Q
02939 #undef GAN_MAT_LMULTL_S
02940 #undef GAN_MAT_LMULTL_I
02941 #undef GAN_MAT_LMULTLI_Q
02942 #undef GAN_MAT_LMULTLI_S
02943 #undef GAN_MAT_LMULTLI_I
02944 #undef GAN_MAT_LMULTLT_Q
02945 #undef GAN_MAT_LMULTLT_S
02946 #undef GAN_MAT_LMULTLT_I
02947 #undef GAN_MAT_LMULTLIT_Q
02948 #undef GAN_MAT_LMULTLIT_S
02949 #undef GAN_MAT_LMULTLIT_I
02950 #undef GAN_MAT_RMULTL_Q
02951 #undef GAN_MAT_RMULTL_S
02952 #undef GAN_MAT_RMULTL_I
02953 #undef GAN_MAT_RMULTLI_Q
02954 #undef GAN_MAT_RMULTLI_S
02955 #undef GAN_MAT_RMULTLI_I
02956 #undef GAN_MAT_RMULTLT_Q
02957 #undef GAN_MAT_RMULTLT_S
02958 #undef GAN_MAT_RMULTLT_I
02959 #undef GAN_MAT_RMULTLIT_Q
02960 #undef GAN_MAT_RMULTLIT_S
02961 #undef GAN_MAT_RMULTLIT_I
02962 #undef GAN_MAT_SRMULTT_Q
02963 #undef GAN_MAT_SRMULTT_S
02964 #undef GAN_MAT_SRMULTT_I
02965 #undef GAN_MAT_SLMULTT_Q
02966 #undef GAN_MAT_SLMULTT_S
02967 #undef GAN_MAT_SLMULTT_I
02968 #undef GAN_MAT_RMULTLIT_S
02969 #undef GAN_MAT_SUMSQR_Q
02970 #undef GAN_MAT_SUMSQR_S
02971 #undef GAN_MAT_FNORM_Q
02972 #undef GAN_MAT_FNORM_S
02973 #undef GAN_MAT_FROM_MAT_Q
02974 #undef GAN_MAT_FROM_MAT_S
02975 #undef GAN_MAT_FROM_SQUMAT_Q
02976 #undef GAN_MAT_FROM_SQUMAT_S
02977 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02978 #undef GAN_SQUMAT_FROM_SQUMAT_S
02979 
02980 /* declare functions specific to lower triangular 4x4 matrices */
02994 /* This library is free software; you can redistribute it and/or
02995    modify it under the terms of the GNU Lesser General Public
02996    License as published by the Free Software Foundation; either
02997    version 2.1 of the License, or (at your option) any later version.
02998 
02999    This library is distributed in the hope that it will be useful,
03000    but WITHOUT ANY WARRANTY; without even the implied warranty of
03001    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03002    Lesser General Public License for more details.
03003 
03004    You should have received a copy of the GNU Lesser General Public
03005    License along with this library; if not, write to the Free Software
03006    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03007 */
03008 
03009 #ifndef _GAN_4X4LTMATF_H
03010 
03027  Gan_SquMatrix44_f *gan_ltmat44f_fill_q (
03028                           Gan_SquMatrix44_f *A,
03029                           float XX,
03030                           float YX, float YY,
03031                           float ZX, float ZY, float ZZ,
03032                           float WX, float WY, float WZ, float WW );
03033 
03053  void gan_ltmat44f_get_parts_q ( const Gan_SquMatrix44_f *A,
03054                                 Gan_SquMatrix33_f *B, Gan_Vector3_f *p,
03055                                 float *s );
03056 
03079  Gan_SquMatrix44_f *gan_ltmat44f_set_parts_q ( Gan_SquMatrix44_f *A,
03080                                               const Gan_SquMatrix33_f *B,
03081                                               const Gan_Vector3_f *p, float s );
03082 
03088 #endif /* #ifndef _GAN_4X4LTMATF_H */
03089 
03090 #define GAN_MATTYPE Gan_SquMatrix44_f
03091 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03092 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03093 #define GAN_VECTOR_TYPE Gan_Vector_f
03094 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03095 #define GAN_REALTYPE float
03096 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
03097 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
03098 #define GAN_VECTYPE1 Gan_Vector4_f
03099 #define GAN_VECTYPE2 Gan_Vector4_f
03100 #define GAN_SQUMATTYPEL Gan_SquMatrix44_f
03101 #define GAN_SQUMATTYPER Gan_SquMatrix44_f
03102 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX44_F
03103 #define GAN_MAT_FPRINT     gan_ltmat44f_fprint
03104 #define GAN_MAT_PRINT      gan_ltmat44f_print
03105 #define GAN_MAT_FSCANF     gan_ltmat44f_fscanf
03106 #define GAN_MAT_FWRITE     gan_ltmat44f_fwrite
03107 #define GAN_MAT_FREAD      gan_ltmat44f_fread
03108 #define GAN_MAT_ZERO_Q     gan_ltmat44f_zero_q
03109 #define GAN_MAT_ZERO_S     gan_ltmat44f_zero_s
03110 #define GAN_MAT_COPY_Q     gan_ltmat44f_copy_q
03111 #define GAN_MAT_COPY_S     gan_ltmat44f_copy_s
03112 #define GAN_MAT_SCALE_Q    gan_ltmat44f_scale_q
03113 #define GAN_MAT_SCALE_S    gan_ltmat44f_scale_s
03114 #define GAN_MAT_SCALE_I    gan_ltmat44f_scale_i
03115 #define GAN_MAT_DIVIDE_Q   gan_ltmat44f_divide_q
03116 #define GAN_MAT_DIVIDE_S   gan_ltmat44f_divide_s
03117 #define GAN_MAT_DIVIDE_I   gan_ltmat44f_divide_i
03118 #define GAN_MAT_NEGATE_Q   gan_ltmat44f_negate_q
03119 #define GAN_MAT_NEGATE_S   gan_ltmat44f_negate_s
03120 #define GAN_MAT_NEGATE_I   gan_ltmat44f_negate_i
03121 #define GAN_MAT_UNIT_Q     gan_ltmat44f_unit_q
03122 #define GAN_MAT_UNIT_S     gan_ltmat44f_unit_s
03123 #define GAN_MAT_UNIT_I     gan_ltmat44f_unit_i
03124 #define GAN_MAT_ADD_Q      gan_ltmat44f_add_q
03125 #define GAN_MAT_ADD_I1     gan_ltmat44f_add_i1
03126 #define GAN_MAT_ADD_I2     gan_ltmat44f_add_i2
03127 #define GAN_MAT_INCREMENT  gan_ltmat44f_increment
03128 #define GAN_MAT_ADD_S      gan_ltmat44f_add_s
03129 #define GAN_MAT_SUB_Q      gan_ltmat44f_sub_q
03130 #define GAN_MAT_SUB_I1     gan_ltmat44f_sub_i1
03131 #define GAN_MAT_SUB_I2     gan_ltmat44f_sub_i2
03132 #define GAN_MAT_DECREMENT  gan_ltmat44f_decrement
03133 #define GAN_MAT_SUB_S      gan_ltmat44f_sub_s
03134 #define GAN_MAT_MULTV_Q    gan_ltmat44f_multv4_q
03135 #define GAN_MAT_MULTV_S    gan_ltmat44f_multv4_s
03136 #define GAN_MAT_MULTV_I    gan_ltmat44f_multv4_i
03137 #define GAN_MATT_MULTV_Q   gan_ltmat44Tf_multv4_q
03138 #define GAN_MATT_MULTV_S   gan_ltmat44Tf_multv4_s
03139 #define GAN_MATT_MULTV_I   gan_ltmat44Tf_multv4_i
03140 #define GAN_MAT_SRMULTT_Q  gan_ltmat44f_srmultT_q
03141 #define GAN_MAT_SRMULTT_S  gan_ltmat44f_srmultT_s
03142 #define GAN_MAT_SRMULTT_I  gan_ltmat44f_srmultT_i
03143 #define GAN_MAT_SLMULTT_Q  gan_ltmat44f_slmultT_q
03144 #define GAN_MAT_SLMULTT_S  gan_ltmat44f_slmultT_s
03145 #define GAN_MAT_SLMULTT_I  gan_ltmat44f_slmultT_i
03146 #define GAN_MAT_SUMSQR_Q   gan_ltmat44f_sumsqr_q
03147 #define GAN_MAT_SUMSQR_S   gan_ltmat44f_sumsqr_s
03148 #define GAN_MAT_FNORM_Q    gan_ltmat44f_Fnorm_q
03149 #define GAN_MAT_FNORM_S    gan_ltmat44f_Fnorm_s
03150 
03151 #define GAN_SQUMAT_IDENT_Q    gan_ltmat44f_ident_q
03152 #define GAN_SQUMAT_IDENT_S    gan_ltmat44f_ident_s
03153 #define GAN_SQUMATI_MULTV_Q   gan_ltmat44If_multv4_q
03154 #define GAN_SQUMATI_MULTV_S   gan_ltmat44If_multv4_s
03155 #define GAN_SQUMATI_MULTV_I   gan_ltmat44If_multv4_i
03156 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat44ITf_multv4_q
03157 #define GAN_SQUMATIT_MULTV_S  gan_ltmat44ITf_multv4_s
03158 #define GAN_SQUMATIT_MULTV_I  gan_ltmat44ITf_multv4_i
03159 #define GAN_SQUMAT_INVERT     gan_ltmat44f_invert
03160 #define GAN_SQUMAT_INVERT_Q   gan_ltmat44f_invert_q
03161 #define GAN_SQUMAT_INVERT_S   gan_ltmat44f_invert_s
03162 #define GAN_SQUMAT_INVERT_I   gan_ltmat44f_invert_i
03163 #define GAN_SQUMAT_DET_Q      gan_ltmat44f_det_q
03164 #define GAN_SQUMAT_DET_S      gan_ltmat44f_det_s
03165 #define GAN_SQUMAT_TRACE_Q    gan_ltmat44f_trace_q
03166 #define GAN_SQUMAT_TRACE_S    gan_ltmat44f_trace_s
03167 
03168 #ifndef _GAN_4X4LTMATF_H
03169 #define _GAN_4X4LTMATF_H
03170 
03171 
03172 #endif /* #ifndef _GAN_4X4LTMATF_H */
03173 
03186 /* This library is free software; you can redistribute it and/or
03187    modify it under the terms of the GNU Lesser General Public
03188    License as published by the Free Software Foundation; either
03189    version 2.1 of the License, or (at your option) any later version.
03190 
03191    This library is distributed in the hope that it will be useful,
03192    but WITHOUT ANY WARRANTY; without even the implied warranty of
03193    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03194    Lesser General Public License for more details.
03195 
03196    You should have received a copy of the GNU Lesser General Public
03197    License along with this library; if not, write to the Free Software
03198    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03199 */
03200 
03201 /* function declarations for functions common to all small square matrix
03202  * types */
03203 
03204 
03205 
03206 /* documentation for macros defined in individual header files */
03207 
03220  Gan_SquMatrix44_f *gan_ltmat44f_ident_q ( Gan_SquMatrix44_f *A );
03221 
03259  Gan_Vector4_f *gan_ltmat44If_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03260                                     Gan_Vector4_f *q );
03261 
03270  Gan_Vector4_f *gan_ltmat44If_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03271 
03280  Gan_Vector4_f *gan_ltmat44ITf_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03281                                      Gan_Vector4_f *q );
03282 
03291  Gan_Vector4_f *gan_ltmat44ITf_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03292 
03310  Gan_SquMatrix44_f *gan_ltmat44f_invert_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03311 
03320  Gan_SquMatrix44_f *gan_ltmat44f_invert_i ( Gan_SquMatrix44_f *A );
03321 
03336  float gan_ltmat44f_det_q ( const Gan_SquMatrix44_f *A );
03337 
03343  float gan_ltmat44f_trace_q ( const Gan_SquMatrix44_f *A );
03344 
03350 #undef GAN_SQUMAT_IDENT_Q
03351 #undef GAN_SQUMAT_IDENT_S
03352 #undef GAN_SQUMAT_TPOSE_Q
03353 #undef GAN_SQUMAT_TPOSE_S
03354 #undef GAN_SQUMAT_TPOSE_I
03355 #undef GAN_MAT_SADDT_Q
03356 #undef GAN_MAT_SADDT_S
03357 #undef GAN_SQUMATI_MULTV_Q
03358 #undef GAN_SQUMATI_MULTV_S
03359 #undef GAN_SQUMATI_MULTV_I
03360 #undef GAN_SQUMATIT_MULTV_Q
03361 #undef GAN_SQUMATIT_MULTV_S
03362 #undef GAN_SQUMATIT_MULTV_I
03363 #undef GAN_SQUMAT_INVERT
03364 #undef GAN_SQUMAT_INVERT_Q
03365 #undef GAN_SQUMAT_INVERT_S
03366 #undef GAN_SQUMAT_INVERT_I
03367 #undef GAN_SQUMAT_ADJOINT_Q
03368 #undef GAN_SQUMAT_ADJOINT_S
03369 #undef GAN_SQUMAT_ADJOINTT_Q
03370 #undef GAN_SQUMAT_ADJOINTT_S
03371 #undef GAN_SQUMAT_DET_Q
03372 #undef GAN_SQUMAT_DET_S
03373 #undef GAN_SQUMAT_TRACE_Q
03374 #undef GAN_SQUMAT_TRACE_S
03375 
03388 /* This library is free software; you can redistribute it and/or
03389    modify it under the terms of the GNU Lesser General Public
03390    License as published by the Free Software Foundation; either
03391    version 2.1 of the License, or (at your option) any later version.
03392 
03393    This library is distributed in the hope that it will be useful,
03394    but WITHOUT ANY WARRANTY; without even the implied warranty of
03395    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03396    Lesser General Public License for more details.
03397 
03398    You should have received a copy of the GNU Lesser General Public
03399    License along with this library; if not, write to the Free Software
03400    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03401 */
03402 
03403 /* function declarations for functions common to all small vector types */
03404 
03405 
03406 
03407 /* documentation for macros defined in individual header files */
03408 
03419  Gan_SquMatrix44_f *gan_ltmat44f_zero_q ( const Gan_SquMatrix44_f *A );
03420 
03437  Gan_SquMatrix44_f *gan_ltmat44f_copy_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03438 
03456  Gan_SquMatrix44_f *gan_ltmat44f_scale_q ( Gan_SquMatrix44_f *A, float a,
03457                                Gan_SquMatrix44_f *B );
03458 
03466  Gan_SquMatrix44_f *gan_ltmat44f_scale_i ( Gan_SquMatrix44_f *A, float a );
03467 
03476  Gan_SquMatrix44_f *gan_ltmat44f_divide_q ( Gan_SquMatrix44_f *A, float a,
03477                                 Gan_SquMatrix44_f *B );
03478 
03486  Gan_SquMatrix44_f *gan_ltmat44f_divide_i ( Gan_SquMatrix44_f *A, float a );
03487 
03495  Gan_SquMatrix44_f *gan_ltmat44f_negate_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03496 
03504  Gan_SquMatrix44_f *gan_ltmat44f_negate_i ( Gan_SquMatrix44_f *A );
03505 
03513  Gan_SquMatrix44_f *gan_ltmat44f_unit_i ( Gan_SquMatrix44_f *A );
03514 
03532  Gan_SquMatrix44_f *gan_ltmat44f_add_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
03533 
03542  Gan_SquMatrix44_f *gan_ltmat44f_add_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03543 
03552  Gan_SquMatrix44_f *gan_ltmat44f_add_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03553 
03562  Gan_SquMatrix44_f *gan_ltmat44f_increment ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03563 
03581  Gan_SquMatrix44_f *gan_ltmat44f_sub_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
03582 
03591  Gan_SquMatrix44_f *gan_ltmat44f_sub_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03592 
03601  Gan_SquMatrix44_f *gan_ltmat44f_sub_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03602 
03611  Gan_SquMatrix44_f *gan_ltmat44f_decrement ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03612 
03631  Gan_Vector4_f *gan_ltmat44f_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03632                                 Gan_Vector4_f *q );
03633 
03642  Gan_Vector4_f *gan_ltmat44f_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03643 
03652  Gan_Vector4_f *gan_ltmat44Tf_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03653                                  Gan_Vector4_f *q );
03654 
03663  Gan_Vector4_f *gan_ltmat44Tf_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03664 
03726  Gan_SquMatrix44_f *gan_ltmat44f_slmultT_q ( Gan_SquMatrix44_f *A, const Gan_SquMatrix44_f *B );
03727 
03737  Gan_SquMatrix44_f *gan_ltmat44f_slmultT_i ( Gan_SquMatrix44_f *A );
03738 
03747  Gan_SquMatrix44_f *gan_ltmat44f_srmultT_q ( const Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03748 
03758  Gan_SquMatrix44_f *gan_ltmat44f_srmultT_i ( Gan_SquMatrix44_f *A );
03759 
03774  float gan_ltmat44f_sumsqr_q ( const Gan_SquMatrix44_f *A );
03775 
03782  float gan_ltmat44f_Fnorm_q ( const Gan_SquMatrix44_f *A );
03783 
03814 /* This library is free software; you can redistribute it and/or
03815    modify it under the terms of the GNU Lesser General Public
03816    License as published by the Free Software Foundation; either
03817    version 2.1 of the License, or (at your option) any later version.
03818 
03819    This library is distributed in the hope that it will be useful,
03820    but WITHOUT ANY WARRANTY; without even the implied warranty of
03821    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03822    Lesser General Public License for more details.
03823 
03824    You should have received a copy of the GNU Lesser General Public
03825    License along with this library; if not, write to the Free Software
03826    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03827 */
03828 
03829 #undef GAN_MATTYPE
03830 #undef GAN_MATRIX_TYPE
03831 #undef GAN_SQUMATRIX_TYPE
03832 #undef GAN_VECTOR_TYPE
03833 #undef GAN_MAT_ELEMENT_TYPE
03834 #undef GAN_REALTYPE
03835 #undef GAN_FWRITE_LENDIAN
03836 #undef GAN_FREAD_LENDIAN
03837 #undef GAN_VECTYPE1
03838 #undef GAN_VECTYPE2
03839 #undef GAN_MATTYPEL
03840 #undef GAN_MATTYPER
03841 #undef GAN_SQUMATTYPEL
03842 #undef GAN_SQUMATTYPER
03843 #undef GAN_FIXED_MATRIX_TYPE
03844 #undef GAN_MAT_FPRINT
03845 #undef GAN_MAT_PRINT
03846 #undef GAN_MAT_FSCANF
03847 #undef GAN_MAT_FWRITE
03848 #undef GAN_MAT_FREAD
03849 #undef GAN_MAT_ZERO_Q
03850 #undef GAN_MAT_ZERO_S
03851 #undef GAN_MAT_COPY_Q
03852 #undef GAN_MAT_COPY_S
03853 #undef GAN_MAT_SCALE_Q
03854 #undef GAN_MAT_SCALE_S
03855 #undef GAN_MAT_SCALE_I
03856 #undef GAN_MAT_DIVIDE_Q
03857 #undef GAN_MAT_DIVIDE_S
03858 #undef GAN_MAT_DIVIDE_I
03859 #undef GAN_MAT_NEGATE_Q
03860 #undef GAN_MAT_NEGATE_S
03861 #undef GAN_MAT_NEGATE_I
03862 #undef GAN_MAT_UNIT_Q
03863 #undef GAN_MAT_UNIT_S
03864 #undef GAN_MAT_UNIT_I
03865 #undef GAN_MAT_ADD_Q
03866 #undef GAN_MAT_ADD_I1
03867 #undef GAN_MAT_ADD_I2
03868 #undef GAN_MAT_INCREMENT
03869 #undef GAN_MAT_ADD_S
03870 #undef GAN_MAT_SUB_Q
03871 #undef GAN_MAT_SUB_I1
03872 #undef GAN_MAT_SUB_I2
03873 #undef GAN_MAT_DECREMENT
03874 #undef GAN_MAT_SUB_S
03875 #undef GAN_VEC_OUTER_Q
03876 #undef GAN_VEC_OUTER_S
03877 #undef GAN_MAT_MULTV_Q
03878 #undef GAN_MAT_MULTV_S
03879 #undef GAN_MAT_MULTV_I
03880 #undef GAN_MATT_MULTV_Q
03881 #undef GAN_MATT_MULTV_S
03882 #undef GAN_MATT_MULTV_I
03883 #undef GAN_MAT_LMULTM_Q
03884 #undef GAN_MAT_LMULTM_S
03885 #undef GAN_MAT_LMULTMT_Q
03886 #undef GAN_MAT_LMULTMT_S
03887 #undef GAN_MAT_RMULTM_Q
03888 #undef GAN_MAT_RMULTM_S
03889 #undef GAN_MAT_RMULTMT_Q
03890 #undef GAN_MAT_RMULTMT_S
03891 #undef GAN_MAT_LMULTMT_SYM_Q
03892 #undef GAN_MAT_LMULTMT_SYM_S
03893 #undef GAN_MAT_RMULTMT_SYM_Q
03894 #undef GAN_MAT_RMULTMT_SYM_S
03895 #undef GAN_MAT_LMULTS_Q
03896 #undef GAN_MAT_LMULTS_S
03897 #undef GAN_MAT_RMULTS_Q
03898 #undef GAN_MAT_RMULTS_S
03899 #undef GAN_SYMMATL_LRMULT_Q
03900 #undef GAN_SYMMATL_LRMULT_S
03901 #undef GAN_SYMMATR_LRMULT_Q
03902 #undef GAN_SYMMATR_LRMULT_S
03903 #undef GAN_MAT_LMULTL_Q
03904 #undef GAN_MAT_LMULTL_S
03905 #undef GAN_MAT_LMULTL_I
03906 #undef GAN_MAT_LMULTLI_Q
03907 #undef GAN_MAT_LMULTLI_S
03908 #undef GAN_MAT_LMULTLI_I
03909 #undef GAN_MAT_LMULTLT_Q
03910 #undef GAN_MAT_LMULTLT_S
03911 #undef GAN_MAT_LMULTLT_I
03912 #undef GAN_MAT_LMULTLIT_Q
03913 #undef GAN_MAT_LMULTLIT_S
03914 #undef GAN_MAT_LMULTLIT_I
03915 #undef GAN_MAT_RMULTL_Q
03916 #undef GAN_MAT_RMULTL_S
03917 #undef GAN_MAT_RMULTL_I
03918 #undef GAN_MAT_RMULTLI_Q
03919 #undef GAN_MAT_RMULTLI_S
03920 #undef GAN_MAT_RMULTLI_I
03921 #undef GAN_MAT_RMULTLT_Q
03922 #undef GAN_MAT_RMULTLT_S
03923 #undef GAN_MAT_RMULTLT_I
03924 #undef GAN_MAT_RMULTLIT_Q
03925 #undef GAN_MAT_RMULTLIT_S
03926 #undef GAN_MAT_RMULTLIT_I
03927 #undef GAN_MAT_SRMULTT_Q
03928 #undef GAN_MAT_SRMULTT_S
03929 #undef GAN_MAT_SRMULTT_I
03930 #undef GAN_MAT_SLMULTT_Q
03931 #undef GAN_MAT_SLMULTT_S
03932 #undef GAN_MAT_SLMULTT_I
03933 #undef GAN_MAT_RMULTLIT_S
03934 #undef GAN_MAT_SUMSQR_Q
03935 #undef GAN_MAT_SUMSQR_S
03936 #undef GAN_MAT_FNORM_Q
03937 #undef GAN_MAT_FNORM_S
03938 #undef GAN_MAT_FROM_MAT_Q
03939 #undef GAN_MAT_FROM_MAT_S
03940 #undef GAN_MAT_FROM_SQUMAT_Q
03941 #undef GAN_MAT_FROM_SQUMAT_S
03942 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03943 #undef GAN_SQUMAT_FROM_SQUMAT_S
03944 
03945 /* declare functions specific to upper triangular 4x4 matrices */
03959 #define GAN_MATTYPE Gan_SquMatrix44_f
03960 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03961 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03962 #define GAN_VECTOR_TYPE Gan_Vector_f
03963 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03964 #define GAN_REALTYPE float
03965 #define GAN_MAT_FPRINT   gan_ltmat44Tf_fprint
03966 #define GAN_MAT_PRINT    gan_ltmat44Tf_print
03967 #define GAN_MAT_FSCANF   gan_ltmat44Tf_fscanf
03968 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX44_F
03969 
03970 #define gan_ltmat44Tf_fwrite gan_ltmat44f_fwrite
03971 #define gan_ltmat44Tf_fread  gan_ltmat44f_fread
03972 
03985 /* This library is free software; you can redistribute it and/or
03986    modify it under the terms of the GNU Lesser General Public
03987    License as published by the Free Software Foundation; either
03988    version 2.1 of the License, or (at your option) any later version.
03989 
03990    This library is distributed in the hope that it will be useful,
03991    but WITHOUT ANY WARRANTY; without even the implied warranty of
03992    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03993    Lesser General Public License for more details.
03994 
03995    You should have received a copy of the GNU Lesser General Public
03996    License along with this library; if not, write to the Free Software
03997    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03998 */
03999 
04000 /* function declarations for functions common to all small square matrix
04001  * types */
04002 
04003 
04004 
04005 /* documentation for macros defined in individual header files */
04006 
04073 #undef GAN_SQUMAT_IDENT_Q
04074 #undef GAN_SQUMAT_IDENT_S
04075 #undef GAN_SQUMAT_TPOSE_Q
04076 #undef GAN_SQUMAT_TPOSE_S
04077 #undef GAN_SQUMAT_TPOSE_I
04078 #undef GAN_MAT_SADDT_Q
04079 #undef GAN_MAT_SADDT_S
04080 #undef GAN_SQUMATI_MULTV_Q
04081 #undef GAN_SQUMATI_MULTV_S
04082 #undef GAN_SQUMATI_MULTV_I
04083 #undef GAN_SQUMATIT_MULTV_Q
04084 #undef GAN_SQUMATIT_MULTV_S
04085 #undef GAN_SQUMATIT_MULTV_I
04086 #undef GAN_SQUMAT_INVERT
04087 #undef GAN_SQUMAT_INVERT_Q
04088 #undef GAN_SQUMAT_INVERT_S
04089 #undef GAN_SQUMAT_INVERT_I
04090 #undef GAN_SQUMAT_ADJOINT_Q
04091 #undef GAN_SQUMAT_ADJOINT_S
04092 #undef GAN_SQUMAT_ADJOINTT_Q
04093 #undef GAN_SQUMAT_ADJOINTT_S
04094 #undef GAN_SQUMAT_DET_Q
04095 #undef GAN_SQUMAT_DET_S
04096 #undef GAN_SQUMAT_TRACE_Q
04097 #undef GAN_SQUMAT_TRACE_S
04098 
04111 /* This library is free software; you can redistribute it and/or
04112    modify it under the terms of the GNU Lesser General Public
04113    License as published by the Free Software Foundation; either
04114    version 2.1 of the License, or (at your option) any later version.
04115 
04116    This library is distributed in the hope that it will be useful,
04117    but WITHOUT ANY WARRANTY; without even the implied warranty of
04118    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04119    Lesser General Public License for more details.
04120 
04121    You should have received a copy of the GNU Lesser General Public
04122    License along with this library; if not, write to the Free Software
04123    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04124 */
04125 
04126 /* function declarations for functions common to all small vector types */
04127 
04128 
04129 
04130 /* documentation for macros defined in individual header files */
04131 
04302 /* This library is free software; you can redistribute it and/or
04303    modify it under the terms of the GNU Lesser General Public
04304    License as published by the Free Software Foundation; either
04305    version 2.1 of the License, or (at your option) any later version.
04306 
04307    This library is distributed in the hope that it will be useful,
04308    but WITHOUT ANY WARRANTY; without even the implied warranty of
04309    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04310    Lesser General Public License for more details.
04311 
04312    You should have received a copy of the GNU Lesser General Public
04313    License along with this library; if not, write to the Free Software
04314    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04315 */
04316 
04317 #undef GAN_MATTYPE
04318 #undef GAN_MATRIX_TYPE
04319 #undef GAN_SQUMATRIX_TYPE
04320 #undef GAN_VECTOR_TYPE
04321 #undef GAN_MAT_ELEMENT_TYPE
04322 #undef GAN_REALTYPE
04323 #undef GAN_FWRITE_LENDIAN
04324 #undef GAN_FREAD_LENDIAN
04325 #undef GAN_VECTYPE1
04326 #undef GAN_VECTYPE2
04327 #undef GAN_MATTYPEL
04328 #undef GAN_MATTYPER
04329 #undef GAN_SQUMATTYPEL
04330 #undef GAN_SQUMATTYPER
04331 #undef GAN_FIXED_MATRIX_TYPE
04332 #undef GAN_MAT_FPRINT
04333 #undef GAN_MAT_PRINT
04334 #undef GAN_MAT_FSCANF
04335 #undef GAN_MAT_FWRITE
04336 #undef GAN_MAT_FREAD
04337 #undef GAN_MAT_ZERO_Q
04338 #undef GAN_MAT_ZERO_S
04339 #undef GAN_MAT_COPY_Q
04340 #undef GAN_MAT_COPY_S
04341 #undef GAN_MAT_SCALE_Q
04342 #undef GAN_MAT_SCALE_S
04343 #undef GAN_MAT_SCALE_I
04344 #undef GAN_MAT_DIVIDE_Q
04345 #undef GAN_MAT_DIVIDE_S
04346 #undef GAN_MAT_DIVIDE_I
04347 #undef GAN_MAT_NEGATE_Q
04348 #undef GAN_MAT_NEGATE_S
04349 #undef GAN_MAT_NEGATE_I
04350 #undef GAN_MAT_UNIT_Q
04351 #undef GAN_MAT_UNIT_S
04352 #undef GAN_MAT_UNIT_I
04353 #undef GAN_MAT_ADD_Q
04354 #undef GAN_MAT_ADD_I1
04355 #undef GAN_MAT_ADD_I2
04356 #undef GAN_MAT_INCREMENT
04357 #undef GAN_MAT_ADD_S
04358 #undef GAN_MAT_SUB_Q
04359 #undef GAN_MAT_SUB_I1
04360 #undef GAN_MAT_SUB_I2
04361 #undef GAN_MAT_DECREMENT
04362 #undef GAN_MAT_SUB_S
04363 #undef GAN_VEC_OUTER_Q
04364 #undef GAN_VEC_OUTER_S
04365 #undef GAN_MAT_MULTV_Q
04366 #undef GAN_MAT_MULTV_S
04367 #undef GAN_MAT_MULTV_I
04368 #undef GAN_MATT_MULTV_Q
04369 #undef GAN_MATT_MULTV_S
04370 #undef GAN_MATT_MULTV_I
04371 #undef GAN_MAT_LMULTM_Q
04372 #undef GAN_MAT_LMULTM_S
04373 #undef GAN_MAT_LMULTMT_Q
04374 #undef GAN_MAT_LMULTMT_S
04375 #undef GAN_MAT_RMULTM_Q
04376 #undef GAN_MAT_RMULTM_S
04377 #undef GAN_MAT_RMULTMT_Q
04378 #undef GAN_MAT_RMULTMT_S
04379 #undef GAN_MAT_LMULTMT_SYM_Q
04380 #undef GAN_MAT_LMULTMT_SYM_S
04381 #undef GAN_MAT_RMULTMT_SYM_Q
04382 #undef GAN_MAT_RMULTMT_SYM_S
04383 #undef GAN_MAT_LMULTS_Q
04384 #undef GAN_MAT_LMULTS_S
04385 #undef GAN_MAT_RMULTS_Q
04386 #undef GAN_MAT_RMULTS_S
04387 #undef GAN_SYMMATL_LRMULT_Q
04388 #undef GAN_SYMMATL_LRMULT_S
04389 #undef GAN_SYMMATR_LRMULT_Q
04390 #undef GAN_SYMMATR_LRMULT_S
04391 #undef GAN_MAT_LMULTL_Q
04392 #undef GAN_MAT_LMULTL_S
04393 #undef GAN_MAT_LMULTL_I
04394 #undef GAN_MAT_LMULTLI_Q
04395 #undef GAN_MAT_LMULTLI_S
04396 #undef GAN_MAT_LMULTLI_I
04397 #undef GAN_MAT_LMULTLT_Q
04398 #undef GAN_MAT_LMULTLT_S
04399 #undef GAN_MAT_LMULTLT_I
04400 #undef GAN_MAT_LMULTLIT_Q
04401 #undef GAN_MAT_LMULTLIT_S
04402 #undef GAN_MAT_LMULTLIT_I
04403 #undef GAN_MAT_RMULTL_Q
04404 #undef GAN_MAT_RMULTL_S
04405 #undef GAN_MAT_RMULTL_I
04406 #undef GAN_MAT_RMULTLI_Q
04407 #undef GAN_MAT_RMULTLI_S
04408 #undef GAN_MAT_RMULTLI_I
04409 #undef GAN_MAT_RMULTLT_Q
04410 #undef GAN_MAT_RMULTLT_S
04411 #undef GAN_MAT_RMULTLT_I
04412 #undef GAN_MAT_RMULTLIT_Q
04413 #undef GAN_MAT_RMULTLIT_S
04414 #undef GAN_MAT_RMULTLIT_I
04415 #undef GAN_MAT_SRMULTT_Q
04416 #undef GAN_MAT_SRMULTT_S
04417 #undef GAN_MAT_SRMULTT_I
04418 #undef GAN_MAT_SLMULTT_Q
04419 #undef GAN_MAT_SLMULTT_S
04420 #undef GAN_MAT_SLMULTT_I
04421 #undef GAN_MAT_RMULTLIT_S
04422 #undef GAN_MAT_SUMSQR_Q
04423 #undef GAN_MAT_SUMSQR_S
04424 #undef GAN_MAT_FNORM_Q
04425 #undef GAN_MAT_FNORM_S
04426 #undef GAN_MAT_FROM_MAT_Q
04427 #undef GAN_MAT_FROM_MAT_S
04428 #undef GAN_MAT_FROM_SQUMAT_Q
04429 #undef GAN_MAT_FROM_SQUMAT_S
04430 #undef GAN_SQUMAT_FROM_SQUMAT_Q
04431 #undef GAN_SQUMAT_FROM_SQUMAT_S
04432 
04445 #ifdef __cplusplus
04446 }
04447 #endif
04448 
04449 #endif /* #ifndef _GAN_4X4MATRIXF_H */

Generated on Fri Mar 17 12:44:47 2006 by  doxygen 1.3.9.1