Main Page | Modules | Class List | Directories | 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 
00564 
00565 typedef struct Gan_Matrix44_f
00566 {
00567    float xx, xy, xz, xw,
00568          yx, yy, yz, yw,
00569          zx, zy, zz, zw,
00570          wx, wy, wz, ww;
00571 } Gan_Matrix44_f;
00572 
00573 #ifndef NDEBUG
00574 
00575 typedef enum { GAN_SYMMETRIC_MATRIX44_F, GAN_LOWER_TRI_MATRIX44_F }
00576  Gan_SquMatrix44Type_f;
00577 #endif /* #ifndef NDEBUG */
00578 
00580 typedef struct Gan_SquMatrix44_f
00581 {
00582 #ifndef NDEBUG
00583    /* square matrix type, for setting and checking in debug mode */
00584    Gan_SquMatrix44Type_f type;
00585 #endif /* #ifndef NDEBUG */
00586 
00587    /* matrix data */
00588    float xx,
00589          yx, yy,
00590          zx, zy, zz,
00591          wx, wy, wz, ww;
00592 } Gan_SquMatrix44_f;
00593 
00594 /* matrix definitions specific to 4x4 matrices */
00595 #define GAN_ST44F_FILL(A,t,XX,YX,YY,ZX,ZY,ZZ,WX,WY,WZ,WW)\
00596     (GAN_TEST_OP1(A,Gan_SquMatrix44_f),gan_eval((A)->type=t),\
00597     GAN_FREP44L_A_C((A)->,=,(XX),(YX),(YY),(ZX),(ZY),(ZZ),(WX),(WY),(WZ),(WW)))
00598 #define GAN_ST44F_IDENT(A,t)\
00599            (GAN_TEST_OP1(A,Gan_SquMatrix44_f),gan_eval((A)->type=t),\
00600             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))
00601 
00602 /* generic matrix multiply operations */
00603 #define GAN_MAT44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00604  (a p1 = GAN_REP4_OP_AB(b,* c,xx,xy,xz,xw,q1,q2,q3,q4,+),\
00605   a p2 = GAN_REP4_OP_AB(b,* c,yx,yy,yz,yw,q1,q2,q3,q4,+),\
00606   a p3 = GAN_REP4_OP_AB(b,* c,zx,zy,zz,zw,q1,q2,q3,q4,+),\
00607   a p4 = GAN_REP4_OP_AB(b,* c,wx,wy,wz,ww,q1,q2,q3,q4,+))
00608 #define GAN_MAT44TF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00609  (a p1 = GAN_REP4_OP_AB(b,* c,xx,yx,zx,wx,q1,q2,q3,q4,+),\
00610   a p2 = GAN_REP4_OP_AB(b,* c,xy,yy,zy,wy,q1,q2,q3,q4,+),\
00611   a p3 = GAN_REP4_OP_AB(b,* c,xz,yz,zz,wz,q1,q2,q3,q4,+),\
00612   a p4 = GAN_REP4_OP_AB(b,* c,xw,yw,zw,ww,q1,q2,q3,q4,+))
00613 
00614 /* symmetric matrix multiply operation */
00615 #define GAN_SYM44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00616  (a p1 = GAN_REP4_OP_AB(b,* c,xx,yx,zx,wx,q1,q2,q3,q4,+),\
00617   a p2 = GAN_REP4_OP_AB(b,* c,yx,yy,zy,wy,q1,q2,q3,q4,+),\
00618   a p3 = GAN_REP4_OP_AB(b,* c,zx,zy,zz,wz,q1,q2,q3,q4,+),\
00619   a p4 = GAN_REP4_OP_AB(b,* c,wx,wy,wz,ww,q1,q2,q3,q4,+))
00620 
00621 /* lower triangular matrix multiply operations */
00622 #define GAN_LOW44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00623  (a p4 = GAN_REP4_OP_AB(b,* c,wx,wy,wz,ww,q1,q2,q3,q4,+),\
00624   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+),\
00625   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00626   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00627 #define GAN_LOW44IF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00628  (a p1 =  c q1 / b xx,\
00629   a p2 = (c q2 - b yx * a p1) / b yy,\
00630   a p3 = (c q3 - b zx * a p1 - b zy * a p2) / b zz,\
00631   a p4 = (c q4 - b wx * a p1 - b wy * a p2 - b wz * a p3) / b ww)
00632 
00633 /* upper triangular matrix multiply operations */
00634 #define GAN_UPP44F_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00635  (a p1 = GAN_REP4_OP_AB(b,* c,xx,yx,zx,wx,q1,q2,q3,q4,+),\
00636   a p2 = GAN_REP3_OP_AB(b,* c,yy,zy,wy,q2,q3,q4,+),\
00637   a p3 = GAN_REP2_OP_AB(b,* c,zz,wz,q3,q4,+),\
00638   a p4 = GAN_REP1_OP_AB(b,* c,ww,q4,+))
00639 #define GAN_UPP44IF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00640  (a p4 =  c q4 / b ww,\
00641   a p3 = (c q3 - b wz * a p4) / b zz,\
00642   a p2 = (c q2 - b zy * a p3 - b wy * a p4) / b yy,\
00643   a p1 = (c q1 - b yx * a p2 - b zx * a p3 - b wx * a p4) / b xx)
00644 
00645 /* symmetric/lower triangular square matrix definitions */
00646 #define GAN_ST44F_ZERO(A,t)\
00647            (GAN_TEST_OP1(A,Gan_SquMatrix44_f), gan_eval((A)->type=t),\
00648             GAN_REP44L_AS_C((A)->,=0.0))
00649 #define GAN_ST44F_COPY(A,B,t)\
00650            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00651             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00652             GAN_REP44L_AA_C((B)->,=(A)->))
00653 #define GAN_ST44F_SCALE(A,a,B,t)\
00654            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00655             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00656             GAN_REP44L_AAS_C((B)->,=(A)->,*(a)))
00657 #define GAN_ST44F_DIVIDE(A,a,B,t)\
00658            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00659             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00660             GAN_REP44L_AAS_C((B)->,=(A)->,/(a)))
00661 #define GAN_ST44F_NEGATE(A,B,t)\
00662            (GAN_TEST_OP2(A,B,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00663             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00664             GAN_REP44L_AA_C((B)->,=-(A)->))
00665 #define GAN_ST44F_ADD(A,B,C,t)\
00666          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix44_f,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00667           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00668           GAN_REP44L_AAA_C((C)->,=(A)->,+(B)->))
00669 #define GAN_ST44F_SUB(A,B,C,t)\
00670          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix44_f,Gan_SquMatrix44_f,Gan_SquMatrix44_f),\
00671           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00672           GAN_REP44L_AAA_C((C)->,=(A)->,-(B)->))
00673 
00674 /* declare functions specific to generic 4x4 matrices */
00688 /* This library is free software; you can redistribute it and/or
00689    modify it under the terms of the GNU Lesser General Public
00690    License as published by the Free Software Foundation; either
00691    version 2.1 of the License, or (at your option) any later version.
00692 
00693    This library is distributed in the hope that it will be useful,
00694    but WITHOUT ANY WARRANTY; without even the implied warranty of
00695    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00696    Lesser General Public License for more details.
00697 
00698    You should have received a copy of the GNU Lesser General Public
00699    License along with this library; if not, write to the Free Software
00700    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00701 */
00702 
00703 #ifndef _GAN_4X4MATF_H
00704 
00721 Gan_Matrix44_f *gan_mat44f_fill_q ( Gan_Matrix44_f *A,
00722                                     float XX, float XY, float XZ, float XW,
00723                                     float YX, float YY, float YZ, float YW,
00724                                     float ZX, float ZY, float ZZ, float ZW,
00725                                     float WX, float WY, float WZ, float WW );
00726 
00748 void gan_mat44f_get_rows_q ( const Gan_Matrix44_f *A,
00749                              Gan_Vector4_f *p, Gan_Vector4_f *q,
00750                              Gan_Vector4_f *r, Gan_Vector4_f *s );
00751 
00763 void gan_mat44f_get_cols_q ( const Gan_Matrix44_f *A,
00764                              Gan_Vector4_f *p, Gan_Vector4_f *q,
00765                              Gan_Vector4_f *r, Gan_Vector4_f *s );
00766 
00774 Gan_Matrix33_f *gan_mat44f_get_m33tl_q ( const Gan_Matrix44_f *A, Gan_Matrix33_f *B );
00775 
00783 Gan_Vector3_f *gan_mat44f_get_v3tr_q ( const Gan_Matrix44_f *A, Gan_Vector3_f *p );
00784 
00798 void gan_mat44f_get_parts_q ( const Gan_Matrix44_f *A, Gan_Matrix33_f *B,
00799                               Gan_Vector3_f *p, Gan_Vector3_f *q, float *s );
00800 
00813 void gan_mat44f_get_blocks_q ( const Gan_Matrix44_f *M,
00814                                Gan_Matrix22_f *A, Gan_Matrix22_f *B,
00815                                Gan_Matrix22_f *C, Gan_Matrix22_f *D );
00816 
00839 Gan_Matrix44_f *gan_mat44f_set_parts_q ( Gan_Matrix44_f *A,
00840                                          const Gan_Matrix33_f *B, const Gan_Vector3_f *p,
00841                                          const Gan_Vector3_f *q, float s );
00842 
00856 Gan_Matrix44_f *gan_mat44f_set_blocks_q ( Gan_Matrix44_f *M,
00857                                           const Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
00858                                           const Gan_Matrix22_f *C, const Gan_Matrix22_f *D );
00859 
00865 #endif /* #ifndef _GAN_4X4MATF_H */
00866 
00867 #define GAN_MATTYPE Gan_Matrix44_f
00868 #define GAN_MATRIX_TYPE Gan_Matrix_f
00869 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00870 #define GAN_VECTOR_TYPE Gan_Vector_f
00871 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00872 #define GAN_REALTYPE float
00873 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
00874 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
00875 #define GAN_VECTYPE1 Gan_Vector4_f
00876 #define GAN_VECTYPE2 Gan_Vector4_f
00877 #define GAN_MATTYPEL Gan_Matrix44_f
00878 #define GAN_MATTYPER Gan_Matrix44_f
00879 #define GAN_SQUMATTYPEL Gan_SquMatrix44_f
00880 #define GAN_SQUMATTYPER Gan_SquMatrix44_f
00881 #define GAN_MAT_FPRINT                     gan_mat44f_fprint
00882 #define GAN_MAT_PRINT                      gan_mat44f_print
00883 #define GAN_MAT_FSCANF                     gan_mat44f_fscanf
00884 #define GAN_MAT_FWRITE                     gan_mat44f_fwrite
00885 #define GAN_MAT_FREAD                      gan_mat44f_fread
00886 #define GAN_MAT_ZERO_Q                     gan_mat44f_zero_q
00887 #define GAN_MAT_ZERO_S                     gan_mat44f_zero_s
00888 #define GAN_MAT_COPY_Q                     gan_mat44f_copy_q
00889 #define GAN_MAT_COPY_S                     gan_mat44f_copy_s
00890 #define GAN_MAT_SCALE_Q                    gan_mat44f_scale_q
00891 #define GAN_MAT_SCALE_I                    gan_mat44f_scale_i
00892 #define GAN_MAT_SCALE_S                    gan_mat44f_scale_s
00893 #define GAN_MAT_DIVIDE_Q                   gan_mat44f_divide_q
00894 #define GAN_MAT_DIVIDE_I                   gan_mat44f_divide_i
00895 #define GAN_MAT_DIVIDE_S                   gan_mat44f_divide_s
00896 #define GAN_MAT_NEGATE_Q                   gan_mat44f_negate_q
00897 #define GAN_MAT_NEGATE_I                   gan_mat44f_negate_i
00898 #define GAN_MAT_NEGATE_S                   gan_mat44f_negate_s
00899 #define GAN_MAT_UNIT_Q                     gan_mat44f_unit_q
00900 #define GAN_MAT_UNIT_I                     gan_mat44f_unit_i
00901 #define GAN_MAT_UNIT_S                     gan_mat44f_unit_s
00902 #define GAN_MAT_ADD_Q                      gan_mat44f_add_q
00903 #define GAN_MAT_ADD_I1                     gan_mat44f_add_i1
00904 #define GAN_MAT_ADD_I2                     gan_mat44f_add_i2
00905 #define GAN_MAT_INCREMENT                  gan_mat44f_increment
00906 #define GAN_MAT_ADD_S                      gan_mat44f_add_s
00907 #define GAN_MAT_SUB_Q                      gan_mat44f_sub_q
00908 #define GAN_MAT_SUB_I1                     gan_mat44f_sub_i1
00909 #define GAN_MAT_SUB_I2                     gan_mat44f_sub_i2
00910 #define GAN_MAT_DECREMENT                  gan_mat44f_decrement
00911 #define GAN_MAT_SUB_S                      gan_mat44f_sub_s
00912 #define GAN_VEC_OUTER_Q                    gan_vec44f_outer_q
00913 #define GAN_VEC_OUTER_S                    gan_vec44f_outer_s
00914 #define GAN_MAT_MULTV_Q                    gan_mat44f_multv4_q
00915 #define GAN_MAT_MULTV_S                    gan_mat44f_multv4_s
00916 #define GAN_MATT_MULTV_Q                   gan_mat44Tf_multv4_q
00917 #define GAN_MATT_MULTV_S                   gan_mat44Tf_multv4_s
00918 #define GAN_MAT_LMULTMT_Q                  gan_mat44f_lmultm44T_q
00919 #define GAN_MAT_LMULTMT_S                  gan_mat44f_lmultm44T_s
00920 #define GAN_MAT_RMULTM_Q                   gan_mat44f_rmultm44_q
00921 #define GAN_MAT_RMULTM_S                   gan_mat44f_rmultm44_s
00922 #define GAN_MAT_RMULTMT_Q                  gan_mat44f_rmultm44T_q
00923 #define GAN_MAT_RMULTMT_S                  gan_mat44f_rmultm44T_s
00924 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat44f_lmultm44T_sym_q
00925 #define GAN_MAT_LMULTMT_SYM_S              gan_mat44f_lmultm44T_sym_s
00926 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat44f_rmultm44T_sym_q
00927 #define GAN_MAT_RMULTMT_SYM_S              gan_mat44f_rmultm44T_sym_s
00928 #define GAN_MAT_SLMULTT_Q                  gan_mat44f_slmultT_q
00929 #define GAN_MAT_SLMULTT_S                  gan_mat44f_slmultT_s
00930 #define GAN_MAT_SRMULTT_Q                  gan_mat44f_srmultT_q
00931 #define GAN_MAT_SRMULTT_S                  gan_mat44f_srmultT_s
00932 #define GAN_MAT_LMULTS_Q                   gan_mat44f_lmults44_q
00933 #define GAN_MAT_LMULTS_S                   gan_mat44f_lmults44_s
00934 #define GAN_MAT_RMULTS_Q                   gan_mat44f_rmults44_q
00935 #define GAN_MAT_RMULTS_S                   gan_mat44f_rmults44_s
00936 #define GAN_SYMMATL_LRMULT_Q               gan_symmat44f_lrmultm44T_q
00937 #define GAN_SYMMATL_LRMULT_S               gan_symmat44f_lrmultm44T_s
00938 #define GAN_SYMMATR_LRMULT_Q               gan_symmat44f_lrmultm44_q
00939 #define GAN_SYMMATR_LRMULT_S               gan_symmat44f_lrmultm44_s
00940 #define GAN_MAT_LMULTL_Q                   gan_mat44f_lmultl44_q
00941 #define GAN_MAT_LMULTL_S                   gan_mat44f_lmultl44_s
00942 #define GAN_MAT_LMULTL_I                   gan_mat44f_lmultl44_i
00943 #define GAN_MAT_LMULTLI_Q                  gan_mat44f_lmultl44I_q
00944 #define GAN_MAT_LMULTLI_S                  gan_mat44f_lmultl44I_s
00945 #define GAN_MAT_LMULTLI_I                  gan_mat44f_lmultl44I_i
00946 #define GAN_MAT_LMULTLT_Q                  gan_mat44f_lmultl44T_q
00947 #define GAN_MAT_LMULTLT_S                  gan_mat44f_lmultl44T_s
00948 #define GAN_MAT_LMULTLT_I                  gan_mat44f_lmultl44T_i
00949 #define GAN_MAT_LMULTLIT_Q                 gan_mat44f_lmultl44IT_q
00950 #define GAN_MAT_LMULTLIT_S                 gan_mat44f_lmultl44IT_s
00951 #define GAN_MAT_LMULTLIT_I                 gan_mat44f_lmultl44IT_i
00952 #define GAN_MAT_RMULTL_Q                   gan_mat44f_rmultl44_q
00953 #define GAN_MAT_RMULTL_S                   gan_mat44f_rmultl44_s
00954 #define GAN_MAT_RMULTL_I                   gan_mat44f_rmultl44_i
00955 #define GAN_MAT_RMULTLI_Q                  gan_mat44f_rmultl44I_q
00956 #define GAN_MAT_RMULTLI_S                  gan_mat44f_rmultl44I_s
00957 #define GAN_MAT_RMULTLI_I                  gan_mat44f_rmultl44I_i
00958 #define GAN_MAT_RMULTLT_Q                  gan_mat44f_rmultl44T_q
00959 #define GAN_MAT_RMULTLT_S                  gan_mat44f_rmultl44T_s
00960 #define GAN_MAT_RMULTLT_I                  gan_mat44f_rmultl44T_i
00961 #define GAN_MAT_RMULTLIT_Q                 gan_mat44f_rmultl44IT_q
00962 #define GAN_MAT_RMULTLIT_S                 gan_mat44f_rmultl44IT_s
00963 #define GAN_MAT_RMULTLIT_I                 gan_mat44f_rmultl44IT_i
00964 #define GAN_MAT_SUMSQR_Q                   gan_mat44f_sumsqr_q
00965 #define GAN_MAT_SUMSQR_S                   gan_mat44f_sumsqr_s
00966 #define GAN_MAT_FNORM_Q                    gan_mat44f_Fnorm_q
00967 #define GAN_MAT_FNORM_S                    gan_mat44f_Fnorm_s
00968 #define GAN_MAT_FROM_MAT_Q                 gan_mat44f_from_matf_q
00969 #define GAN_MAT_FROM_MAT_S                 gan_mat44f_from_matf_s
00970 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat44f_from_squmatf_q
00971 #define GAN_MAT_FROM_SQUMAT_S              gan_mat44f_from_squmatf_s
00972 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat44f_from_squmatf_q
00973 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat44f_from_squmatf_s
00974 
00975 #define GAN_SQUMAT_IDENT_Q    gan_mat44f_ident_q
00976 #define GAN_SQUMAT_IDENT_S    gan_mat44f_ident_s
00977 #define GAN_SQUMAT_TPOSE_Q    gan_mat44f_tpose_q
00978 #define GAN_SQUMAT_TPOSE_S    gan_mat44f_tpose_s
00979 #define GAN_SQUMAT_TPOSE_I    gan_mat44f_tpose_i
00980 #define GAN_MAT_SADDT_Q       gan_mat44f_saddT_q
00981 #define GAN_MAT_SADDT_S       gan_mat44f_saddT_s
00982 #define GAN_SQUMAT_INVERT     gan_mat44f_invert
00983 #define GAN_SQUMAT_INVERT_Q   gan_mat44f_invert_q
00984 #define GAN_SQUMAT_INVERT_S   gan_mat44f_invert_s
00985 #define GAN_SQUMAT_INVERT_I   gan_mat44f_invert_i
00986 #define GAN_SQUMAT_ADJOINT_Q  gan_mat44f_adjoint_q
00987 #define GAN_SQUMAT_ADJOINT_S  gan_mat44f_adjoint_s
00988 #define GAN_SQUMAT_ADJOINTT_Q gan_mat44f_adjointT_q
00989 #define GAN_SQUMAT_ADJOINTT_S gan_mat44f_adjointT_s
00990 #define GAN_SQUMAT_DET_Q      gan_mat44f_det_q
00991 #define GAN_SQUMAT_DET_S      gan_mat44f_det_s
00992 #define GAN_SQUMAT_TRACE_Q    gan_mat44f_trace_q
00993 #define GAN_SQUMAT_TRACE_S    gan_mat44f_trace_s
00994 
00995 #ifndef _GAN_4X4MATF_H
00996 #define _GAN_4X4MATF_H
00997 
00998 
00999 #endif /* #ifndef _GAN_4X4MATF_H */
01000 
01013 /* This library is free software; you can redistribute it and/or
01014    modify it under the terms of the GNU Lesser General Public
01015    License as published by the Free Software Foundation; either
01016    version 2.1 of the License, or (at your option) any later version.
01017 
01018    This library is distributed in the hope that it will be useful,
01019    but WITHOUT ANY WARRANTY; without even the implied warranty of
01020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01021    Lesser General Public License for more details.
01022 
01023    You should have received a copy of the GNU Lesser General Public
01024    License along with this library; if not, write to the Free Software
01025    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01026 */
01027 
01028 /* function declarations for functions common to all small square matrix
01029  * types */
01030 
01031 
01032 
01033 /* documentation for macros defined in individual header files */
01034 
01047 Gan_Matrix44_f *gan_mat44f_ident_q ( Gan_Matrix44_f *A );
01048 
01066 Gan_Matrix44_f *gan_mat44f_tpose_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01067 
01085 Gan_SquMatrix44_f *gan_mat44f_saddT_q ( const Gan_Matrix44_f *A, Gan_SquMatrix44_f *B );
01086 
01117 Gan_Matrix44_f *gan_mat44f_invert_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01118 
01127 Gan_Matrix44_f *gan_mat44f_invert_i ( Gan_Matrix44_f *A );
01128 
01143 float gan_mat44f_det_q ( const Gan_Matrix44_f *A );
01144 
01150 float gan_mat44f_trace_q ( const Gan_Matrix44_f *A );
01151 
01157 #undef GAN_SQUMAT_IDENT_Q
01158 #undef GAN_SQUMAT_IDENT_S
01159 #undef GAN_SQUMAT_TPOSE_Q
01160 #undef GAN_SQUMAT_TPOSE_S
01161 #undef GAN_SQUMAT_TPOSE_I
01162 #undef GAN_MAT_SADDT_Q
01163 #undef GAN_MAT_SADDT_S
01164 #undef GAN_SQUMATI_MULTV_Q
01165 #undef GAN_SQUMATI_MULTV_S
01166 #undef GAN_SQUMATI_MULTV_I
01167 #undef GAN_SQUMATIT_MULTV_Q
01168 #undef GAN_SQUMATIT_MULTV_S
01169 #undef GAN_SQUMATIT_MULTV_I
01170 #undef GAN_SQUMAT_INVERT
01171 #undef GAN_SQUMAT_INVERT_Q
01172 #undef GAN_SQUMAT_INVERT_S
01173 #undef GAN_SQUMAT_INVERT_I
01174 #undef GAN_SQUMAT_ADJOINT_Q
01175 #undef GAN_SQUMAT_ADJOINT_S
01176 #undef GAN_SQUMAT_ADJOINTT_Q
01177 #undef GAN_SQUMAT_ADJOINTT_S
01178 #undef GAN_SQUMAT_DET_Q
01179 #undef GAN_SQUMAT_DET_S
01180 #undef GAN_SQUMAT_TRACE_Q
01181 #undef GAN_SQUMAT_TRACE_S
01182 
01195 /* This library is free software; you can redistribute it and/or
01196    modify it under the terms of the GNU Lesser General Public
01197    License as published by the Free Software Foundation; either
01198    version 2.1 of the License, or (at your option) any later version.
01199 
01200    This library is distributed in the hope that it will be useful,
01201    but WITHOUT ANY WARRANTY; without even the implied warranty of
01202    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01203    Lesser General Public License for more details.
01204 
01205    You should have received a copy of the GNU Lesser General Public
01206    License along with this library; if not, write to the Free Software
01207    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01208 */
01209 
01210 /* function declarations for functions common to all small vector types */
01211 
01212 
01213 
01214 /* documentation for macros defined in individual header files */
01215 
01226 Gan_Matrix44_f *gan_mat44f_zero_q ( const Gan_Matrix44_f *A );
01227 
01244 Gan_Matrix44_f *gan_mat44f_copy_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01245 
01263 Gan_Matrix44_f *gan_mat44f_scale_q ( Gan_Matrix44_f *A, float a,
01264                                Gan_Matrix44_f *B );
01265 
01273 Gan_Matrix44_f *gan_mat44f_scale_i ( Gan_Matrix44_f *A, float a );
01274 
01283 Gan_Matrix44_f *gan_mat44f_divide_q ( Gan_Matrix44_f *A, float a,
01284                                 Gan_Matrix44_f *B );
01285 
01293 Gan_Matrix44_f *gan_mat44f_divide_i ( Gan_Matrix44_f *A, float a );
01294 
01302 Gan_Matrix44_f *gan_mat44f_negate_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01303 
01311 Gan_Matrix44_f *gan_mat44f_negate_i ( Gan_Matrix44_f *A );
01312 
01320 Gan_Matrix44_f *gan_mat44f_unit_i ( Gan_Matrix44_f *A );
01321 
01339 Gan_Matrix44_f *gan_mat44f_add_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B, Gan_Matrix44_f *C );
01340 
01349 Gan_Matrix44_f *gan_mat44f_add_i1 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01350 
01359 Gan_Matrix44_f *gan_mat44f_add_i2 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01360 
01369 Gan_Matrix44_f *gan_mat44f_increment ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01370 
01388 Gan_Matrix44_f *gan_mat44f_sub_q ( Gan_Matrix44_f *A, Gan_Matrix44_f *B, Gan_Matrix44_f *C );
01389 
01398 Gan_Matrix44_f *gan_mat44f_sub_i1 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01399 
01408 Gan_Matrix44_f *gan_mat44f_sub_i2 ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01409 
01418 Gan_Matrix44_f *gan_mat44f_decrement ( Gan_Matrix44_f *A, Gan_Matrix44_f *B );
01419 
01437 Gan_Matrix44_f *gan_vec44f_outer_q ( const Gan_Vector4_f *p, const Gan_Vector4_f *q,
01438                                Gan_Matrix44_f *A );
01439 
01448 Gan_Vector4_f *gan_mat44f_multv4_q ( const Gan_Matrix44_f *A, Gan_Vector4_f *p,
01449                                 Gan_Vector4_f *q );
01450 
01451 
01460 Gan_Vector4_f *gan_mat44Tf_multv4_q ( const Gan_Matrix44_f *A, Gan_Vector4_f *p,
01461                                  Gan_Vector4_f *q );
01462 
01463 
01483 Gan_Matrix44_f *gan_mat44f_lmultm44T_q ( Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01484                                  Gan_Matrix44_f *C );
01485 
01495 Gan_Matrix44_f *gan_mat44f_rmultm44_q ( Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01496                                 Gan_Matrix44_f *C );
01497 
01507 Gan_Matrix44_f *gan_mat44f_rmultm44T_q ( Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01508                                  Gan_Matrix44_f *C );
01509 
01521 Gan_SquMatrix44_f *gan_mat44f_lmultm44T_sym_q ( const Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01522                                          Gan_SquMatrix44_f *C );
01523 
01535 Gan_SquMatrix44_f *gan_mat44f_rmultm44T_sym_q ( const Gan_Matrix44_f *A, const Gan_Matrix44_f *B,
01536                                          Gan_SquMatrix44_f *C );
01537 
01546 Gan_Matrix44_f *gan_mat44f_lmults44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01547                                 Gan_Matrix44_f *C );
01548 
01557 Gan_Matrix44_f *gan_mat44f_rmults44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01558                                 Gan_Matrix44_f *C );
01559 
01579 Gan_SquMatrix44_f *gan_symmat44f_lrmultm44T_q ( const Gan_SquMatrix44_f *A, const Gan_Matrix44_f *B,
01580                                         const Gan_Matrix44_f *C, Gan_SquMatrix44_f *D );
01581 
01592 Gan_SquMatrix44_f *gan_symmat44f_lrmultm44_q ( const Gan_SquMatrix44_f *A, const Gan_Matrix44_f *B,
01593                                         const Gan_Matrix44_f *C, Gan_SquMatrix44_f *D );
01594 
01613 Gan_Matrix44_f *gan_mat44f_lmultl44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01614                                 Gan_Matrix44_f *C );
01615 
01625 Gan_Matrix44_f *gan_mat44f_lmultl44I_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01626                                  Gan_Matrix44_f *C );
01627 
01637 Gan_Matrix44_f *gan_mat44f_lmultl44T_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01638                                  Gan_Matrix44_f *C );
01639 
01649 Gan_Matrix44_f *gan_mat44f_lmultl44IT_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01650                                   Gan_Matrix44_f *C );
01651 
01661 Gan_Matrix44_f *gan_mat44f_rmultl44_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01662                                 Gan_Matrix44_f *C );
01663 
01673 Gan_Matrix44_f *gan_mat44f_rmultl44I_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01674                                  Gan_Matrix44_f *C );
01675 
01685 Gan_Matrix44_f *gan_mat44f_rmultl44T_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01686                                  Gan_Matrix44_f *C );
01687 
01697 Gan_Matrix44_f *gan_mat44f_rmultl44IT_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B,
01698                                   Gan_Matrix44_f *C );
01699 
01709 Gan_Matrix44_f *gan_mat44f_lmultl44_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01710 
01720 Gan_Matrix44_f *gan_mat44f_lmultl44I_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01721 
01731 Gan_Matrix44_f *gan_mat44f_lmultl44T_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01732 
01742 Gan_Matrix44_f *gan_mat44f_lmultl44IT_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01743 
01753 Gan_Matrix44_f *gan_mat44f_rmultl44_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01754 
01764 Gan_Matrix44_f *gan_mat44f_rmultl44I_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01765 
01775 Gan_Matrix44_f *gan_mat44f_rmultl44T_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01776 
01786 Gan_Matrix44_f *gan_mat44f_rmultl44IT_i ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01787 
01796 Gan_SquMatrix44_f *gan_mat44f_slmultT_q ( Gan_Matrix44_f *A, const Gan_SquMatrix44_f *B );
01797 
01798 
01807 Gan_SquMatrix44_f *gan_mat44f_srmultT_q ( const Gan_Matrix44_f *A, Gan_SquMatrix44_f *B );
01808 
01809 
01824 float gan_mat44f_sumsqr_q ( const Gan_Matrix44_f *A );
01825 
01832 float gan_mat44f_Fnorm_q ( const Gan_Matrix44_f *A );
01833 
01843 Gan_Matrix44_f *gan_mat44f_from_matf_q ( const Gan_Matrix_f *A, Gan_Matrix44_f *B );
01844 
01845 Gan_Matrix44_f *gan_mat44f_from_squmatf_q ( const Gan_SquMatrix_f *A, Gan_Matrix44_f *B );
01846 
01847 Gan_SquMatrix44_f *gan_squmat44f_from_squmatf_q ( const Gan_SquMatrix_f *A,
01848                                             Gan_SquMatrix44_f *B );
01849 
01868 /* This library is free software; you can redistribute it and/or
01869    modify it under the terms of the GNU Lesser General Public
01870    License as published by the Free Software Foundation; either
01871    version 2.1 of the License, or (at your option) any later version.
01872 
01873    This library is distributed in the hope that it will be useful,
01874    but WITHOUT ANY WARRANTY; without even the implied warranty of
01875    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01876    Lesser General Public License for more details.
01877 
01878    You should have received a copy of the GNU Lesser General Public
01879    License along with this library; if not, write to the Free Software
01880    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01881 */
01882 
01883 #undef GAN_MATTYPE
01884 #undef GAN_MATRIX_TYPE
01885 #undef GAN_SQUMATRIX_TYPE
01886 #undef GAN_VECTOR_TYPE
01887 #undef GAN_MAT_ELEMENT_TYPE
01888 #undef GAN_REALTYPE
01889 #undef GAN_FWRITE_LENDIAN
01890 #undef GAN_FREAD_LENDIAN
01891 #undef GAN_VECTYPE1
01892 #undef GAN_VECTYPE2
01893 #undef GAN_MATTYPEL
01894 #undef GAN_MATTYPER
01895 #undef GAN_SQUMATTYPEL
01896 #undef GAN_SQUMATTYPER
01897 #undef GAN_FIXED_MATRIX_TYPE
01898 #undef GAN_MAT_FPRINT
01899 #undef GAN_MAT_PRINT
01900 #undef GAN_MAT_FSCANF
01901 #undef GAN_MAT_FWRITE
01902 #undef GAN_MAT_FREAD
01903 #undef GAN_MAT_ZERO_Q
01904 #undef GAN_MAT_ZERO_S
01905 #undef GAN_MAT_COPY_Q
01906 #undef GAN_MAT_COPY_S
01907 #undef GAN_MAT_SCALE_Q
01908 #undef GAN_MAT_SCALE_S
01909 #undef GAN_MAT_SCALE_I
01910 #undef GAN_MAT_DIVIDE_Q
01911 #undef GAN_MAT_DIVIDE_S
01912 #undef GAN_MAT_DIVIDE_I
01913 #undef GAN_MAT_NEGATE_Q
01914 #undef GAN_MAT_NEGATE_S
01915 #undef GAN_MAT_NEGATE_I
01916 #undef GAN_MAT_UNIT_Q
01917 #undef GAN_MAT_UNIT_S
01918 #undef GAN_MAT_UNIT_I
01919 #undef GAN_MAT_ADD_Q
01920 #undef GAN_MAT_ADD_I1
01921 #undef GAN_MAT_ADD_I2
01922 #undef GAN_MAT_INCREMENT
01923 #undef GAN_MAT_ADD_S
01924 #undef GAN_MAT_SUB_Q
01925 #undef GAN_MAT_SUB_I1
01926 #undef GAN_MAT_SUB_I2
01927 #undef GAN_MAT_DECREMENT
01928 #undef GAN_MAT_SUB_S
01929 #undef GAN_VEC_OUTER_Q
01930 #undef GAN_VEC_OUTER_S
01931 #undef GAN_MAT_MULTV_Q
01932 #undef GAN_MAT_MULTV_S
01933 #undef GAN_MAT_MULTV_I
01934 #undef GAN_MATT_MULTV_Q
01935 #undef GAN_MATT_MULTV_S
01936 #undef GAN_MATT_MULTV_I
01937 #undef GAN_MAT_LMULTM_Q
01938 #undef GAN_MAT_LMULTM_S
01939 #undef GAN_MAT_LMULTMT_Q
01940 #undef GAN_MAT_LMULTMT_S
01941 #undef GAN_MAT_RMULTM_Q
01942 #undef GAN_MAT_RMULTM_S
01943 #undef GAN_MAT_RMULTMT_Q
01944 #undef GAN_MAT_RMULTMT_S
01945 #undef GAN_MAT_LMULTMT_SYM_Q
01946 #undef GAN_MAT_LMULTMT_SYM_S
01947 #undef GAN_MAT_RMULTMT_SYM_Q
01948 #undef GAN_MAT_RMULTMT_SYM_S
01949 #undef GAN_MAT_LMULTS_Q
01950 #undef GAN_MAT_LMULTS_S
01951 #undef GAN_MAT_RMULTS_Q
01952 #undef GAN_MAT_RMULTS_S
01953 #undef GAN_SYMMATL_LRMULT_Q
01954 #undef GAN_SYMMATL_LRMULT_S
01955 #undef GAN_SYMMATR_LRMULT_Q
01956 #undef GAN_SYMMATR_LRMULT_S
01957 #undef GAN_MAT_LMULTL_Q
01958 #undef GAN_MAT_LMULTL_S
01959 #undef GAN_MAT_LMULTL_I
01960 #undef GAN_MAT_LMULTLI_Q
01961 #undef GAN_MAT_LMULTLI_S
01962 #undef GAN_MAT_LMULTLI_I
01963 #undef GAN_MAT_LMULTLT_Q
01964 #undef GAN_MAT_LMULTLT_S
01965 #undef GAN_MAT_LMULTLT_I
01966 #undef GAN_MAT_LMULTLIT_Q
01967 #undef GAN_MAT_LMULTLIT_S
01968 #undef GAN_MAT_LMULTLIT_I
01969 #undef GAN_MAT_RMULTL_Q
01970 #undef GAN_MAT_RMULTL_S
01971 #undef GAN_MAT_RMULTL_I
01972 #undef GAN_MAT_RMULTLI_Q
01973 #undef GAN_MAT_RMULTLI_S
01974 #undef GAN_MAT_RMULTLI_I
01975 #undef GAN_MAT_RMULTLT_Q
01976 #undef GAN_MAT_RMULTLT_S
01977 #undef GAN_MAT_RMULTLT_I
01978 #undef GAN_MAT_RMULTLIT_Q
01979 #undef GAN_MAT_RMULTLIT_S
01980 #undef GAN_MAT_RMULTLIT_I
01981 #undef GAN_MAT_SRMULTT_Q
01982 #undef GAN_MAT_SRMULTT_S
01983 #undef GAN_MAT_SRMULTT_I
01984 #undef GAN_MAT_SLMULTT_Q
01985 #undef GAN_MAT_SLMULTT_S
01986 #undef GAN_MAT_SLMULTT_I
01987 #undef GAN_MAT_RMULTLIT_S
01988 #undef GAN_MAT_SUMSQR_Q
01989 #undef GAN_MAT_SUMSQR_S
01990 #undef GAN_MAT_FNORM_Q
01991 #undef GAN_MAT_FNORM_S
01992 #undef GAN_MAT_FROM_MAT_Q
01993 #undef GAN_MAT_FROM_MAT_S
01994 #undef GAN_MAT_FROM_SQUMAT_Q
01995 #undef GAN_MAT_FROM_SQUMAT_S
01996 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01997 #undef GAN_SQUMAT_FROM_SQUMAT_S
01998 
01999 /* declare functions specific to symmetric 4x4 matrices */
02013 /* This library is free software; you can redistribute it and/or
02014    modify it under the terms of the GNU Lesser General Public
02015    License as published by the Free Software Foundation; either
02016    version 2.1 of the License, or (at your option) any later version.
02017 
02018    This library is distributed in the hope that it will be useful,
02019    but WITHOUT ANY WARRANTY; without even the implied warranty of
02020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02021    Lesser General Public License for more details.
02022 
02023    You should have received a copy of the GNU Lesser General Public
02024    License along with this library; if not, write to the Free Software
02025    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02026 */
02027 
02028 #ifndef _GAN_4X4SYMMATF_H
02029 
02044 Gan_SquMatrix44_f *
02045     gan_symmat44f_fill_q ( Gan_SquMatrix44_f *A,
02046                            float XX,
02047                            float YX, float YY,
02048                            float ZX, float ZY, float ZZ,
02049                            float WX, float WY, float WZ, float WW );
02050 
02072 void gan_symmat44f_get_parts_q ( const Gan_SquMatrix44_f *A,
02073                                  Gan_SquMatrix33_f *B, Gan_Vector3_f *p,
02074                                  float *s);
02075 
02089 void gan_symmat44f_get_blocks_q ( const Gan_SquMatrix44_f *A,
02090                                   Gan_SquMatrix22_f *B, Gan_Matrix22_f *C,
02091                                   Gan_SquMatrix22_f *D );
02092 
02115 Gan_SquMatrix44_f *gan_symmat44f_set_parts_q ( Gan_SquMatrix44_f *A,
02116                                                const Gan_SquMatrix33_f *B,
02117                                                const Gan_Vector3_f *p, float s );
02118 
02132 Gan_SquMatrix44_f *gan_symmat44f_set_blocks_q ( Gan_SquMatrix44_f *A,
02133                                                 const Gan_SquMatrix22_f *B,
02134                                                 const Gan_Matrix22_f *C,
02135                                                 const Gan_SquMatrix22_f *D );
02136 
02142 #endif /* #ifndef _GAN_4X4SYMMATF_H */
02143 
02144 #define GAN_MATTYPE Gan_SquMatrix44_f
02145 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02146 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02147 #define GAN_VECTOR_TYPE Gan_Vector_f
02148 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02149 #define GAN_REALTYPE float
02150 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
02151 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
02152 #define GAN_VECTYPE1 Gan_Vector4_f
02153 #define GAN_VECTYPE2 Gan_Vector4_f
02154 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX44_F
02155 #define GAN_MAT_FPRINT      gan_symmat44f_fprint
02156 #define GAN_MAT_PRINT       gan_symmat44f_print
02157 #define GAN_MAT_FSCANF      gan_symmat44f_fscanf
02158 #define GAN_MAT_FWRITE      gan_symmat44f_fwrite
02159 #define GAN_MAT_FREAD       gan_symmat44f_fread
02160 #define GAN_MAT_ZERO_Q      gan_symmat44f_zero_q
02161 #define GAN_MAT_ZERO_S      gan_symmat44f_zero_s
02162 #define GAN_MAT_COPY_Q      gan_symmat44f_copy_q
02163 #define GAN_MAT_COPY_S      gan_symmat44f_copy_s
02164 #define GAN_MAT_SCALE_Q     gan_symmat44f_scale_q
02165 #define GAN_MAT_SCALE_S     gan_symmat44f_scale_s
02166 #define GAN_MAT_SCALE_I     gan_symmat44f_scale_i
02167 #define GAN_MAT_DIVIDE_Q    gan_symmat44f_divide_q
02168 #define GAN_MAT_DIVIDE_S    gan_symmat44f_divide_s
02169 #define GAN_MAT_DIVIDE_I    gan_symmat44f_divide_i
02170 #define GAN_MAT_NEGATE_Q    gan_symmat44f_negate_q
02171 #define GAN_MAT_NEGATE_S    gan_symmat44f_negate_s
02172 #define GAN_MAT_NEGATE_I    gan_symmat44f_negate_i
02173 #define GAN_MAT_UNIT_Q      gan_symmat44f_unit_q
02174 #define GAN_MAT_UNIT_S      gan_symmat44f_unit_s
02175 #define GAN_MAT_UNIT_I      gan_symmat44f_unit_i
02176 #define GAN_MAT_ADD_Q       gan_symmat44f_add_q
02177 #define GAN_MAT_ADD_I1      gan_symmat44f_add_i1
02178 #define GAN_MAT_ADD_I2      gan_symmat44f_add_i2
02179 #define GAN_MAT_INCREMENT   gan_symmat44f_increment
02180 #define GAN_MAT_ADD_S       gan_symmat44f_add_s
02181 #define GAN_MAT_SUB_Q       gan_symmat44f_sub_q
02182 #define GAN_MAT_SUB_I1      gan_symmat44f_sub_i1
02183 #define GAN_MAT_SUB_I2      gan_symmat44f_sub_i2
02184 #define GAN_MAT_DECREMENT   gan_symmat44f_decrement
02185 #define GAN_MAT_SUB_S       gan_symmat44f_sub_s
02186 #define GAN_MAT_MULTV_Q     gan_symmat44f_multv4_q
02187 #define GAN_MAT_MULTV_S     gan_symmat44f_multv4_s
02188 #define GAN_MAT_SUMSQR_Q    gan_symmat44f_sumsqr_q
02189 #define GAN_MAT_SUMSQR_S    gan_symmat44f_sumsqr_s
02190 #define GAN_MAT_FNORM_Q     gan_symmat44f_Fnorm_q
02191 #define GAN_MAT_FNORM_S     gan_symmat44f_Fnorm_s
02192 
02193 #define GAN_SQUMAT_IDENT_Q    gan_symmat44f_ident_q
02194 #define GAN_SQUMAT_IDENT_S    gan_symmat44f_ident_s
02195 #define GAN_SQUMAT_INVERT     gan_symmat44f_invert
02196 #define GAN_SQUMAT_INVERT_Q   gan_symmat44f_invert_q
02197 #define GAN_SQUMAT_INVERT_S   gan_symmat44f_invert_s
02198 #define GAN_SQUMAT_INVERT_I   gan_symmat44f_invert_i
02199 #define GAN_SQUMAT_DET_Q      gan_symmat44f_det_q
02200 #define GAN_SQUMAT_DET_S      gan_symmat44f_det_s
02201 #define GAN_SQUMAT_TRACE_Q    gan_symmat44f_trace_q
02202 #define GAN_SQUMAT_TRACE_S    gan_symmat44f_trace_s
02203 
02204 #define GAN_VEC_OUTER_SYM_Q gan_vec44f_outer_sym_q
02205 #define GAN_VEC_OUTER_SYM_S gan_vec44f_outer_sym_s
02206 #define GAN_SYMMAT_CHOLESKY   gan_symmat44f_cholesky
02207 #define GAN_SYMMAT_CHOLESKY_Q gan_symmat44f_cholesky_q
02208 #define GAN_SYMMAT_CHOLESKY_S gan_symmat44f_cholesky_s
02209 #define GAN_SYMMAT_CHOLESKY_I gan_symmat44f_cholesky_i
02210 
02211 #ifndef _GAN_4X4SYMMATF_H
02212 #define _GAN_4X4SYMMATF_H
02213 
02214 
02215 #endif /* #ifndef _GAN_4X4SYMMATF_H */
02216 
02229 /* This library is free software; you can redistribute it and/or
02230    modify it under the terms of the GNU Lesser General Public
02231    License as published by the Free Software Foundation; either
02232    version 2.1 of the License, or (at your option) any later version.
02233 
02234    This library is distributed in the hope that it will be useful,
02235    but WITHOUT ANY WARRANTY; without even the implied warranty of
02236    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02237    Lesser General Public License for more details.
02238 
02239    You should have received a copy of the GNU Lesser General Public
02240    License along with this library; if not, write to the Free Software
02241    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02242 */
02243 
02244 /* function declarations for functions common to all small symmetric matrix
02245  * types */
02246 
02247 
02248 
02249 /* documentation for macros defined in individual header files */
02250 
02261 Gan_SquMatrix44_f *gan_vec44f_outer_sym_q ( const Gan_Vector4_f *p, Gan_SquMatrix44_f *A );
02262 
02284 Gan_SquMatrix44_f *gan_symmat44f_cholesky_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02285 
02294 Gan_SquMatrix44_f *gan_symmat44f_cholesky_i ( Gan_SquMatrix44_f *A );
02295 
02301 #undef GAN_VEC_OUTER_SYM_Q
02302 #undef GAN_VEC_OUTER_SYM_S
02303 #undef GAN_SYMMAT_CHOLESKY
02304 #undef GAN_SYMMAT_CHOLESKY_Q
02305 #undef GAN_SYMMAT_CHOLESKY_S
02306 #undef GAN_SYMMAT_CHOLESKY_I
02307 
02320 /* This library is free software; you can redistribute it and/or
02321    modify it under the terms of the GNU Lesser General Public
02322    License as published by the Free Software Foundation; either
02323    version 2.1 of the License, or (at your option) any later version.
02324 
02325    This library is distributed in the hope that it will be useful,
02326    but WITHOUT ANY WARRANTY; without even the implied warranty of
02327    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02328    Lesser General Public License for more details.
02329 
02330    You should have received a copy of the GNU Lesser General Public
02331    License along with this library; if not, write to the Free Software
02332    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02333 */
02334 
02335 /* function declarations for functions common to all small square matrix
02336  * types */
02337 
02338 
02339 
02340 /* documentation for macros defined in individual header files */
02341 
02354 Gan_SquMatrix44_f *gan_symmat44f_ident_q ( Gan_SquMatrix44_f *A );
02355 
02406 Gan_SquMatrix44_f *gan_symmat44f_invert_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02407 
02416 Gan_SquMatrix44_f *gan_symmat44f_invert_i ( Gan_SquMatrix44_f *A );
02417 
02432 float gan_symmat44f_det_q ( const Gan_SquMatrix44_f *A );
02433 
02439 float gan_symmat44f_trace_q ( const Gan_SquMatrix44_f *A );
02440 
02446 #undef GAN_SQUMAT_IDENT_Q
02447 #undef GAN_SQUMAT_IDENT_S
02448 #undef GAN_SQUMAT_TPOSE_Q
02449 #undef GAN_SQUMAT_TPOSE_S
02450 #undef GAN_SQUMAT_TPOSE_I
02451 #undef GAN_MAT_SADDT_Q
02452 #undef GAN_MAT_SADDT_S
02453 #undef GAN_SQUMATI_MULTV_Q
02454 #undef GAN_SQUMATI_MULTV_S
02455 #undef GAN_SQUMATI_MULTV_I
02456 #undef GAN_SQUMATIT_MULTV_Q
02457 #undef GAN_SQUMATIT_MULTV_S
02458 #undef GAN_SQUMATIT_MULTV_I
02459 #undef GAN_SQUMAT_INVERT
02460 #undef GAN_SQUMAT_INVERT_Q
02461 #undef GAN_SQUMAT_INVERT_S
02462 #undef GAN_SQUMAT_INVERT_I
02463 #undef GAN_SQUMAT_ADJOINT_Q
02464 #undef GAN_SQUMAT_ADJOINT_S
02465 #undef GAN_SQUMAT_ADJOINTT_Q
02466 #undef GAN_SQUMAT_ADJOINTT_S
02467 #undef GAN_SQUMAT_DET_Q
02468 #undef GAN_SQUMAT_DET_S
02469 #undef GAN_SQUMAT_TRACE_Q
02470 #undef GAN_SQUMAT_TRACE_S
02471 
02484 /* This library is free software; you can redistribute it and/or
02485    modify it under the terms of the GNU Lesser General Public
02486    License as published by the Free Software Foundation; either
02487    version 2.1 of the License, or (at your option) any later version.
02488 
02489    This library is distributed in the hope that it will be useful,
02490    but WITHOUT ANY WARRANTY; without even the implied warranty of
02491    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02492    Lesser General Public License for more details.
02493 
02494    You should have received a copy of the GNU Lesser General Public
02495    License along with this library; if not, write to the Free Software
02496    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02497 */
02498 
02499 /* function declarations for functions common to all small vector types */
02500 
02501 
02502 
02503 /* documentation for macros defined in individual header files */
02504 
02515 Gan_SquMatrix44_f *gan_symmat44f_zero_q ( const Gan_SquMatrix44_f *A );
02516 
02533 Gan_SquMatrix44_f *gan_symmat44f_copy_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02534 
02552 Gan_SquMatrix44_f *gan_symmat44f_scale_q ( Gan_SquMatrix44_f *A, float a,
02553                                Gan_SquMatrix44_f *B );
02554 
02562 Gan_SquMatrix44_f *gan_symmat44f_scale_i ( Gan_SquMatrix44_f *A, float a );
02563 
02572 Gan_SquMatrix44_f *gan_symmat44f_divide_q ( Gan_SquMatrix44_f *A, float a,
02573                                 Gan_SquMatrix44_f *B );
02574 
02582 Gan_SquMatrix44_f *gan_symmat44f_divide_i ( Gan_SquMatrix44_f *A, float a );
02583 
02591 Gan_SquMatrix44_f *gan_symmat44f_negate_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02592 
02600 Gan_SquMatrix44_f *gan_symmat44f_negate_i ( Gan_SquMatrix44_f *A );
02601 
02609 Gan_SquMatrix44_f *gan_symmat44f_unit_i ( Gan_SquMatrix44_f *A );
02610 
02628 Gan_SquMatrix44_f *gan_symmat44f_add_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
02629 
02638 Gan_SquMatrix44_f *gan_symmat44f_add_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02639 
02648 Gan_SquMatrix44_f *gan_symmat44f_add_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02649 
02658 Gan_SquMatrix44_f *gan_symmat44f_increment ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02659 
02677 Gan_SquMatrix44_f *gan_symmat44f_sub_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
02678 
02687 Gan_SquMatrix44_f *gan_symmat44f_sub_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02688 
02697 Gan_SquMatrix44_f *gan_symmat44f_sub_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02698 
02707 Gan_SquMatrix44_f *gan_symmat44f_decrement ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
02708 
02727 Gan_Vector4_f *gan_symmat44f_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
02728                                 Gan_Vector4_f *q );
02729 
02730 
02731 
02732 
02804 float gan_symmat44f_sumsqr_q ( const Gan_SquMatrix44_f *A );
02805 
02812 float gan_symmat44f_Fnorm_q ( const Gan_SquMatrix44_f *A );
02813 
02844 /* This library is free software; you can redistribute it and/or
02845    modify it under the terms of the GNU Lesser General Public
02846    License as published by the Free Software Foundation; either
02847    version 2.1 of the License, or (at your option) any later version.
02848 
02849    This library is distributed in the hope that it will be useful,
02850    but WITHOUT ANY WARRANTY; without even the implied warranty of
02851    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02852    Lesser General Public License for more details.
02853 
02854    You should have received a copy of the GNU Lesser General Public
02855    License along with this library; if not, write to the Free Software
02856    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02857 */
02858 
02859 #undef GAN_MATTYPE
02860 #undef GAN_MATRIX_TYPE
02861 #undef GAN_SQUMATRIX_TYPE
02862 #undef GAN_VECTOR_TYPE
02863 #undef GAN_MAT_ELEMENT_TYPE
02864 #undef GAN_REALTYPE
02865 #undef GAN_FWRITE_LENDIAN
02866 #undef GAN_FREAD_LENDIAN
02867 #undef GAN_VECTYPE1
02868 #undef GAN_VECTYPE2
02869 #undef GAN_MATTYPEL
02870 #undef GAN_MATTYPER
02871 #undef GAN_SQUMATTYPEL
02872 #undef GAN_SQUMATTYPER
02873 #undef GAN_FIXED_MATRIX_TYPE
02874 #undef GAN_MAT_FPRINT
02875 #undef GAN_MAT_PRINT
02876 #undef GAN_MAT_FSCANF
02877 #undef GAN_MAT_FWRITE
02878 #undef GAN_MAT_FREAD
02879 #undef GAN_MAT_ZERO_Q
02880 #undef GAN_MAT_ZERO_S
02881 #undef GAN_MAT_COPY_Q
02882 #undef GAN_MAT_COPY_S
02883 #undef GAN_MAT_SCALE_Q
02884 #undef GAN_MAT_SCALE_S
02885 #undef GAN_MAT_SCALE_I
02886 #undef GAN_MAT_DIVIDE_Q
02887 #undef GAN_MAT_DIVIDE_S
02888 #undef GAN_MAT_DIVIDE_I
02889 #undef GAN_MAT_NEGATE_Q
02890 #undef GAN_MAT_NEGATE_S
02891 #undef GAN_MAT_NEGATE_I
02892 #undef GAN_MAT_UNIT_Q
02893 #undef GAN_MAT_UNIT_S
02894 #undef GAN_MAT_UNIT_I
02895 #undef GAN_MAT_ADD_Q
02896 #undef GAN_MAT_ADD_I1
02897 #undef GAN_MAT_ADD_I2
02898 #undef GAN_MAT_INCREMENT
02899 #undef GAN_MAT_ADD_S
02900 #undef GAN_MAT_SUB_Q
02901 #undef GAN_MAT_SUB_I1
02902 #undef GAN_MAT_SUB_I2
02903 #undef GAN_MAT_DECREMENT
02904 #undef GAN_MAT_SUB_S
02905 #undef GAN_VEC_OUTER_Q
02906 #undef GAN_VEC_OUTER_S
02907 #undef GAN_MAT_MULTV_Q
02908 #undef GAN_MAT_MULTV_S
02909 #undef GAN_MAT_MULTV_I
02910 #undef GAN_MATT_MULTV_Q
02911 #undef GAN_MATT_MULTV_S
02912 #undef GAN_MATT_MULTV_I
02913 #undef GAN_MAT_LMULTM_Q
02914 #undef GAN_MAT_LMULTM_S
02915 #undef GAN_MAT_LMULTMT_Q
02916 #undef GAN_MAT_LMULTMT_S
02917 #undef GAN_MAT_RMULTM_Q
02918 #undef GAN_MAT_RMULTM_S
02919 #undef GAN_MAT_RMULTMT_Q
02920 #undef GAN_MAT_RMULTMT_S
02921 #undef GAN_MAT_LMULTMT_SYM_Q
02922 #undef GAN_MAT_LMULTMT_SYM_S
02923 #undef GAN_MAT_RMULTMT_SYM_Q
02924 #undef GAN_MAT_RMULTMT_SYM_S
02925 #undef GAN_MAT_LMULTS_Q
02926 #undef GAN_MAT_LMULTS_S
02927 #undef GAN_MAT_RMULTS_Q
02928 #undef GAN_MAT_RMULTS_S
02929 #undef GAN_SYMMATL_LRMULT_Q
02930 #undef GAN_SYMMATL_LRMULT_S
02931 #undef GAN_SYMMATR_LRMULT_Q
02932 #undef GAN_SYMMATR_LRMULT_S
02933 #undef GAN_MAT_LMULTL_Q
02934 #undef GAN_MAT_LMULTL_S
02935 #undef GAN_MAT_LMULTL_I
02936 #undef GAN_MAT_LMULTLI_Q
02937 #undef GAN_MAT_LMULTLI_S
02938 #undef GAN_MAT_LMULTLI_I
02939 #undef GAN_MAT_LMULTLT_Q
02940 #undef GAN_MAT_LMULTLT_S
02941 #undef GAN_MAT_LMULTLT_I
02942 #undef GAN_MAT_LMULTLIT_Q
02943 #undef GAN_MAT_LMULTLIT_S
02944 #undef GAN_MAT_LMULTLIT_I
02945 #undef GAN_MAT_RMULTL_Q
02946 #undef GAN_MAT_RMULTL_S
02947 #undef GAN_MAT_RMULTL_I
02948 #undef GAN_MAT_RMULTLI_Q
02949 #undef GAN_MAT_RMULTLI_S
02950 #undef GAN_MAT_RMULTLI_I
02951 #undef GAN_MAT_RMULTLT_Q
02952 #undef GAN_MAT_RMULTLT_S
02953 #undef GAN_MAT_RMULTLT_I
02954 #undef GAN_MAT_RMULTLIT_Q
02955 #undef GAN_MAT_RMULTLIT_S
02956 #undef GAN_MAT_RMULTLIT_I
02957 #undef GAN_MAT_SRMULTT_Q
02958 #undef GAN_MAT_SRMULTT_S
02959 #undef GAN_MAT_SRMULTT_I
02960 #undef GAN_MAT_SLMULTT_Q
02961 #undef GAN_MAT_SLMULTT_S
02962 #undef GAN_MAT_SLMULTT_I
02963 #undef GAN_MAT_RMULTLIT_S
02964 #undef GAN_MAT_SUMSQR_Q
02965 #undef GAN_MAT_SUMSQR_S
02966 #undef GAN_MAT_FNORM_Q
02967 #undef GAN_MAT_FNORM_S
02968 #undef GAN_MAT_FROM_MAT_Q
02969 #undef GAN_MAT_FROM_MAT_S
02970 #undef GAN_MAT_FROM_SQUMAT_Q
02971 #undef GAN_MAT_FROM_SQUMAT_S
02972 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02973 #undef GAN_SQUMAT_FROM_SQUMAT_S
02974 
02975 /* declare functions specific to lower triangular 4x4 matrices */
02989 /* This library is free software; you can redistribute it and/or
02990    modify it under the terms of the GNU Lesser General Public
02991    License as published by the Free Software Foundation; either
02992    version 2.1 of the License, or (at your option) any later version.
02993 
02994    This library is distributed in the hope that it will be useful,
02995    but WITHOUT ANY WARRANTY; without even the implied warranty of
02996    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02997    Lesser General Public License for more details.
02998 
02999    You should have received a copy of the GNU Lesser General Public
03000    License along with this library; if not, write to the Free Software
03001    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03002 */
03003 
03004 #ifndef _GAN_4X4LTMATF_H
03005 
03022 Gan_SquMatrix44_f *gan_ltmat44f_fill_q (
03023                           Gan_SquMatrix44_f *A,
03024                           float XX,
03025                           float YX, float YY,
03026                           float ZX, float ZY, float ZZ,
03027                           float WX, float WY, float WZ, float WW );
03028 
03048 void gan_ltmat44f_get_parts_q ( const Gan_SquMatrix44_f *A,
03049                                 Gan_SquMatrix33_f *B, Gan_Vector3_f *p,
03050                                 float *s );
03051 
03074 Gan_SquMatrix44_f *gan_ltmat44f_set_parts_q ( Gan_SquMatrix44_f *A,
03075                                               const Gan_SquMatrix33_f *B,
03076                                               const Gan_Vector3_f *p, float s );
03077 
03083 #endif /* #ifndef _GAN_4X4LTMATF_H */
03084 
03085 #define GAN_MATTYPE Gan_SquMatrix44_f
03086 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03087 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03088 #define GAN_VECTOR_TYPE Gan_Vector_f
03089 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03090 #define GAN_REALTYPE float
03091 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
03092 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
03093 #define GAN_VECTYPE1 Gan_Vector4_f
03094 #define GAN_VECTYPE2 Gan_Vector4_f
03095 #define GAN_SQUMATTYPEL Gan_SquMatrix44_f
03096 #define GAN_SQUMATTYPER Gan_SquMatrix44_f
03097 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX44_F
03098 #define GAN_MAT_FPRINT     gan_ltmat44f_fprint
03099 #define GAN_MAT_PRINT      gan_ltmat44f_print
03100 #define GAN_MAT_FSCANF     gan_ltmat44f_fscanf
03101 #define GAN_MAT_FWRITE     gan_ltmat44f_fwrite
03102 #define GAN_MAT_FREAD      gan_ltmat44f_fread
03103 #define GAN_MAT_ZERO_Q     gan_ltmat44f_zero_q
03104 #define GAN_MAT_ZERO_S     gan_ltmat44f_zero_s
03105 #define GAN_MAT_COPY_Q     gan_ltmat44f_copy_q
03106 #define GAN_MAT_COPY_S     gan_ltmat44f_copy_s
03107 #define GAN_MAT_SCALE_Q    gan_ltmat44f_scale_q
03108 #define GAN_MAT_SCALE_S    gan_ltmat44f_scale_s
03109 #define GAN_MAT_SCALE_I    gan_ltmat44f_scale_i
03110 #define GAN_MAT_DIVIDE_Q   gan_ltmat44f_divide_q
03111 #define GAN_MAT_DIVIDE_S   gan_ltmat44f_divide_s
03112 #define GAN_MAT_DIVIDE_I   gan_ltmat44f_divide_i
03113 #define GAN_MAT_NEGATE_Q   gan_ltmat44f_negate_q
03114 #define GAN_MAT_NEGATE_S   gan_ltmat44f_negate_s
03115 #define GAN_MAT_NEGATE_I   gan_ltmat44f_negate_i
03116 #define GAN_MAT_UNIT_Q     gan_ltmat44f_unit_q
03117 #define GAN_MAT_UNIT_S     gan_ltmat44f_unit_s
03118 #define GAN_MAT_UNIT_I     gan_ltmat44f_unit_i
03119 #define GAN_MAT_ADD_Q      gan_ltmat44f_add_q
03120 #define GAN_MAT_ADD_I1     gan_ltmat44f_add_i1
03121 #define GAN_MAT_ADD_I2     gan_ltmat44f_add_i2
03122 #define GAN_MAT_INCREMENT  gan_ltmat44f_increment
03123 #define GAN_MAT_ADD_S      gan_ltmat44f_add_s
03124 #define GAN_MAT_SUB_Q      gan_ltmat44f_sub_q
03125 #define GAN_MAT_SUB_I1     gan_ltmat44f_sub_i1
03126 #define GAN_MAT_SUB_I2     gan_ltmat44f_sub_i2
03127 #define GAN_MAT_DECREMENT  gan_ltmat44f_decrement
03128 #define GAN_MAT_SUB_S      gan_ltmat44f_sub_s
03129 #define GAN_MAT_MULTV_Q    gan_ltmat44f_multv4_q
03130 #define GAN_MAT_MULTV_S    gan_ltmat44f_multv4_s
03131 #define GAN_MAT_MULTV_I    gan_ltmat44f_multv4_i
03132 #define GAN_MATT_MULTV_Q   gan_ltmat44Tf_multv4_q
03133 #define GAN_MATT_MULTV_S   gan_ltmat44Tf_multv4_s
03134 #define GAN_MATT_MULTV_I   gan_ltmat44Tf_multv4_i
03135 #define GAN_MAT_SRMULTT_Q  gan_ltmat44f_srmultT_q
03136 #define GAN_MAT_SRMULTT_S  gan_ltmat44f_srmultT_s
03137 #define GAN_MAT_SRMULTT_I  gan_ltmat44f_srmultT_i
03138 #define GAN_MAT_SLMULTT_Q  gan_ltmat44f_slmultT_q
03139 #define GAN_MAT_SLMULTT_S  gan_ltmat44f_slmultT_s
03140 #define GAN_MAT_SLMULTT_I  gan_ltmat44f_slmultT_i
03141 #define GAN_MAT_SUMSQR_Q   gan_ltmat44f_sumsqr_q
03142 #define GAN_MAT_SUMSQR_S   gan_ltmat44f_sumsqr_s
03143 #define GAN_MAT_FNORM_Q    gan_ltmat44f_Fnorm_q
03144 #define GAN_MAT_FNORM_S    gan_ltmat44f_Fnorm_s
03145 
03146 #define GAN_SQUMAT_IDENT_Q    gan_ltmat44f_ident_q
03147 #define GAN_SQUMAT_IDENT_S    gan_ltmat44f_ident_s
03148 #define GAN_SQUMATI_MULTV_Q   gan_ltmat44If_multv4_q
03149 #define GAN_SQUMATI_MULTV_S   gan_ltmat44If_multv4_s
03150 #define GAN_SQUMATI_MULTV_I   gan_ltmat44If_multv4_i
03151 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat44ITf_multv4_q
03152 #define GAN_SQUMATIT_MULTV_S  gan_ltmat44ITf_multv4_s
03153 #define GAN_SQUMATIT_MULTV_I  gan_ltmat44ITf_multv4_i
03154 #define GAN_SQUMAT_INVERT     gan_ltmat44f_invert
03155 #define GAN_SQUMAT_INVERT_Q   gan_ltmat44f_invert_q
03156 #define GAN_SQUMAT_INVERT_S   gan_ltmat44f_invert_s
03157 #define GAN_SQUMAT_INVERT_I   gan_ltmat44f_invert_i
03158 #define GAN_SQUMAT_DET_Q      gan_ltmat44f_det_q
03159 #define GAN_SQUMAT_DET_S      gan_ltmat44f_det_s
03160 #define GAN_SQUMAT_TRACE_Q    gan_ltmat44f_trace_q
03161 #define GAN_SQUMAT_TRACE_S    gan_ltmat44f_trace_s
03162 
03163 #ifndef _GAN_4X4LTMATF_H
03164 #define _GAN_4X4LTMATF_H
03165 
03166 
03167 #endif /* #ifndef _GAN_4X4LTMATF_H */
03168 
03181 /* This library is free software; you can redistribute it and/or
03182    modify it under the terms of the GNU Lesser General Public
03183    License as published by the Free Software Foundation; either
03184    version 2.1 of the License, or (at your option) any later version.
03185 
03186    This library is distributed in the hope that it will be useful,
03187    but WITHOUT ANY WARRANTY; without even the implied warranty of
03188    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03189    Lesser General Public License for more details.
03190 
03191    You should have received a copy of the GNU Lesser General Public
03192    License along with this library; if not, write to the Free Software
03193    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03194 */
03195 
03196 /* function declarations for functions common to all small square matrix
03197  * types */
03198 
03199 
03200 
03201 /* documentation for macros defined in individual header files */
03202 
03215 Gan_SquMatrix44_f *gan_ltmat44f_ident_q ( Gan_SquMatrix44_f *A );
03216 
03254 Gan_Vector4_f *gan_ltmat44If_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03255                                     Gan_Vector4_f *q );
03256 
03265 Gan_Vector4_f *gan_ltmat44If_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03266 
03275 Gan_Vector4_f *gan_ltmat44ITf_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03276                                      Gan_Vector4_f *q );
03277 
03286 Gan_Vector4_f *gan_ltmat44ITf_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03287 
03305 Gan_SquMatrix44_f *gan_ltmat44f_invert_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03306 
03315 Gan_SquMatrix44_f *gan_ltmat44f_invert_i ( Gan_SquMatrix44_f *A );
03316 
03331 float gan_ltmat44f_det_q ( const Gan_SquMatrix44_f *A );
03332 
03338 float gan_ltmat44f_trace_q ( const Gan_SquMatrix44_f *A );
03339 
03345 #undef GAN_SQUMAT_IDENT_Q
03346 #undef GAN_SQUMAT_IDENT_S
03347 #undef GAN_SQUMAT_TPOSE_Q
03348 #undef GAN_SQUMAT_TPOSE_S
03349 #undef GAN_SQUMAT_TPOSE_I
03350 #undef GAN_MAT_SADDT_Q
03351 #undef GAN_MAT_SADDT_S
03352 #undef GAN_SQUMATI_MULTV_Q
03353 #undef GAN_SQUMATI_MULTV_S
03354 #undef GAN_SQUMATI_MULTV_I
03355 #undef GAN_SQUMATIT_MULTV_Q
03356 #undef GAN_SQUMATIT_MULTV_S
03357 #undef GAN_SQUMATIT_MULTV_I
03358 #undef GAN_SQUMAT_INVERT
03359 #undef GAN_SQUMAT_INVERT_Q
03360 #undef GAN_SQUMAT_INVERT_S
03361 #undef GAN_SQUMAT_INVERT_I
03362 #undef GAN_SQUMAT_ADJOINT_Q
03363 #undef GAN_SQUMAT_ADJOINT_S
03364 #undef GAN_SQUMAT_ADJOINTT_Q
03365 #undef GAN_SQUMAT_ADJOINTT_S
03366 #undef GAN_SQUMAT_DET_Q
03367 #undef GAN_SQUMAT_DET_S
03368 #undef GAN_SQUMAT_TRACE_Q
03369 #undef GAN_SQUMAT_TRACE_S
03370 
03383 /* This library is free software; you can redistribute it and/or
03384    modify it under the terms of the GNU Lesser General Public
03385    License as published by the Free Software Foundation; either
03386    version 2.1 of the License, or (at your option) any later version.
03387 
03388    This library is distributed in the hope that it will be useful,
03389    but WITHOUT ANY WARRANTY; without even the implied warranty of
03390    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03391    Lesser General Public License for more details.
03392 
03393    You should have received a copy of the GNU Lesser General Public
03394    License along with this library; if not, write to the Free Software
03395    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03396 */
03397 
03398 /* function declarations for functions common to all small vector types */
03399 
03400 
03401 
03402 /* documentation for macros defined in individual header files */
03403 
03414 Gan_SquMatrix44_f *gan_ltmat44f_zero_q ( const Gan_SquMatrix44_f *A );
03415 
03432 Gan_SquMatrix44_f *gan_ltmat44f_copy_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03433 
03451 Gan_SquMatrix44_f *gan_ltmat44f_scale_q ( Gan_SquMatrix44_f *A, float a,
03452                                Gan_SquMatrix44_f *B );
03453 
03461 Gan_SquMatrix44_f *gan_ltmat44f_scale_i ( Gan_SquMatrix44_f *A, float a );
03462 
03471 Gan_SquMatrix44_f *gan_ltmat44f_divide_q ( Gan_SquMatrix44_f *A, float a,
03472                                 Gan_SquMatrix44_f *B );
03473 
03481 Gan_SquMatrix44_f *gan_ltmat44f_divide_i ( Gan_SquMatrix44_f *A, float a );
03482 
03490 Gan_SquMatrix44_f *gan_ltmat44f_negate_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03491 
03499 Gan_SquMatrix44_f *gan_ltmat44f_negate_i ( Gan_SquMatrix44_f *A );
03500 
03508 Gan_SquMatrix44_f *gan_ltmat44f_unit_i ( Gan_SquMatrix44_f *A );
03509 
03527 Gan_SquMatrix44_f *gan_ltmat44f_add_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
03528 
03537 Gan_SquMatrix44_f *gan_ltmat44f_add_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03538 
03547 Gan_SquMatrix44_f *gan_ltmat44f_add_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03548 
03557 Gan_SquMatrix44_f *gan_ltmat44f_increment ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03558 
03576 Gan_SquMatrix44_f *gan_ltmat44f_sub_q ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B, Gan_SquMatrix44_f *C );
03577 
03586 Gan_SquMatrix44_f *gan_ltmat44f_sub_i1 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03587 
03596 Gan_SquMatrix44_f *gan_ltmat44f_sub_i2 ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03597 
03606 Gan_SquMatrix44_f *gan_ltmat44f_decrement ( Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03607 
03626 Gan_Vector4_f *gan_ltmat44f_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03627                                 Gan_Vector4_f *q );
03628 
03637 Gan_Vector4_f *gan_ltmat44f_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03638 
03647 Gan_Vector4_f *gan_ltmat44Tf_multv4_q ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p,
03648                                  Gan_Vector4_f *q );
03649 
03658 Gan_Vector4_f *gan_ltmat44Tf_multv4_i ( const Gan_SquMatrix44_f *A, Gan_Vector4_f *p );
03659 
03721 Gan_SquMatrix44_f *gan_ltmat44f_slmultT_q ( Gan_SquMatrix44_f *A, const Gan_SquMatrix44_f *B );
03722 
03732 Gan_SquMatrix44_f *gan_ltmat44f_slmultT_i ( Gan_SquMatrix44_f *A );
03733 
03742 Gan_SquMatrix44_f *gan_ltmat44f_srmultT_q ( const Gan_SquMatrix44_f *A, Gan_SquMatrix44_f *B );
03743 
03753 Gan_SquMatrix44_f *gan_ltmat44f_srmultT_i ( Gan_SquMatrix44_f *A );
03754 
03769 float gan_ltmat44f_sumsqr_q ( const Gan_SquMatrix44_f *A );
03770 
03777 float gan_ltmat44f_Fnorm_q ( const Gan_SquMatrix44_f *A );
03778 
03809 /* This library is free software; you can redistribute it and/or
03810    modify it under the terms of the GNU Lesser General Public
03811    License as published by the Free Software Foundation; either
03812    version 2.1 of the License, or (at your option) any later version.
03813 
03814    This library is distributed in the hope that it will be useful,
03815    but WITHOUT ANY WARRANTY; without even the implied warranty of
03816    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03817    Lesser General Public License for more details.
03818 
03819    You should have received a copy of the GNU Lesser General Public
03820    License along with this library; if not, write to the Free Software
03821    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03822 */
03823 
03824 #undef GAN_MATTYPE
03825 #undef GAN_MATRIX_TYPE
03826 #undef GAN_SQUMATRIX_TYPE
03827 #undef GAN_VECTOR_TYPE
03828 #undef GAN_MAT_ELEMENT_TYPE
03829 #undef GAN_REALTYPE
03830 #undef GAN_FWRITE_LENDIAN
03831 #undef GAN_FREAD_LENDIAN
03832 #undef GAN_VECTYPE1
03833 #undef GAN_VECTYPE2
03834 #undef GAN_MATTYPEL
03835 #undef GAN_MATTYPER
03836 #undef GAN_SQUMATTYPEL
03837 #undef GAN_SQUMATTYPER
03838 #undef GAN_FIXED_MATRIX_TYPE
03839 #undef GAN_MAT_FPRINT
03840 #undef GAN_MAT_PRINT
03841 #undef GAN_MAT_FSCANF
03842 #undef GAN_MAT_FWRITE
03843 #undef GAN_MAT_FREAD
03844 #undef GAN_MAT_ZERO_Q
03845 #undef GAN_MAT_ZERO_S
03846 #undef GAN_MAT_COPY_Q
03847 #undef GAN_MAT_COPY_S
03848 #undef GAN_MAT_SCALE_Q
03849 #undef GAN_MAT_SCALE_S
03850 #undef GAN_MAT_SCALE_I
03851 #undef GAN_MAT_DIVIDE_Q
03852 #undef GAN_MAT_DIVIDE_S
03853 #undef GAN_MAT_DIVIDE_I
03854 #undef GAN_MAT_NEGATE_Q
03855 #undef GAN_MAT_NEGATE_S
03856 #undef GAN_MAT_NEGATE_I
03857 #undef GAN_MAT_UNIT_Q
03858 #undef GAN_MAT_UNIT_S
03859 #undef GAN_MAT_UNIT_I
03860 #undef GAN_MAT_ADD_Q
03861 #undef GAN_MAT_ADD_I1
03862 #undef GAN_MAT_ADD_I2
03863 #undef GAN_MAT_INCREMENT
03864 #undef GAN_MAT_ADD_S
03865 #undef GAN_MAT_SUB_Q
03866 #undef GAN_MAT_SUB_I1
03867 #undef GAN_MAT_SUB_I2
03868 #undef GAN_MAT_DECREMENT
03869 #undef GAN_MAT_SUB_S
03870 #undef GAN_VEC_OUTER_Q
03871 #undef GAN_VEC_OUTER_S
03872 #undef GAN_MAT_MULTV_Q
03873 #undef GAN_MAT_MULTV_S
03874 #undef GAN_MAT_MULTV_I
03875 #undef GAN_MATT_MULTV_Q
03876 #undef GAN_MATT_MULTV_S
03877 #undef GAN_MATT_MULTV_I
03878 #undef GAN_MAT_LMULTM_Q
03879 #undef GAN_MAT_LMULTM_S
03880 #undef GAN_MAT_LMULTMT_Q
03881 #undef GAN_MAT_LMULTMT_S
03882 #undef GAN_MAT_RMULTM_Q
03883 #undef GAN_MAT_RMULTM_S
03884 #undef GAN_MAT_RMULTMT_Q
03885 #undef GAN_MAT_RMULTMT_S
03886 #undef GAN_MAT_LMULTMT_SYM_Q
03887 #undef GAN_MAT_LMULTMT_SYM_S
03888 #undef GAN_MAT_RMULTMT_SYM_Q
03889 #undef GAN_MAT_RMULTMT_SYM_S
03890 #undef GAN_MAT_LMULTS_Q
03891 #undef GAN_MAT_LMULTS_S
03892 #undef GAN_MAT_RMULTS_Q
03893 #undef GAN_MAT_RMULTS_S
03894 #undef GAN_SYMMATL_LRMULT_Q
03895 #undef GAN_SYMMATL_LRMULT_S
03896 #undef GAN_SYMMATR_LRMULT_Q
03897 #undef GAN_SYMMATR_LRMULT_S
03898 #undef GAN_MAT_LMULTL_Q
03899 #undef GAN_MAT_LMULTL_S
03900 #undef GAN_MAT_LMULTL_I
03901 #undef GAN_MAT_LMULTLI_Q
03902 #undef GAN_MAT_LMULTLI_S
03903 #undef GAN_MAT_LMULTLI_I
03904 #undef GAN_MAT_LMULTLT_Q
03905 #undef GAN_MAT_LMULTLT_S
03906 #undef GAN_MAT_LMULTLT_I
03907 #undef GAN_MAT_LMULTLIT_Q
03908 #undef GAN_MAT_LMULTLIT_S
03909 #undef GAN_MAT_LMULTLIT_I
03910 #undef GAN_MAT_RMULTL_Q
03911 #undef GAN_MAT_RMULTL_S
03912 #undef GAN_MAT_RMULTL_I
03913 #undef GAN_MAT_RMULTLI_Q
03914 #undef GAN_MAT_RMULTLI_S
03915 #undef GAN_MAT_RMULTLI_I
03916 #undef GAN_MAT_RMULTLT_Q
03917 #undef GAN_MAT_RMULTLT_S
03918 #undef GAN_MAT_RMULTLT_I
03919 #undef GAN_MAT_RMULTLIT_Q
03920 #undef GAN_MAT_RMULTLIT_S
03921 #undef GAN_MAT_RMULTLIT_I
03922 #undef GAN_MAT_SRMULTT_Q
03923 #undef GAN_MAT_SRMULTT_S
03924 #undef GAN_MAT_SRMULTT_I
03925 #undef GAN_MAT_SLMULTT_Q
03926 #undef GAN_MAT_SLMULTT_S
03927 #undef GAN_MAT_SLMULTT_I
03928 #undef GAN_MAT_RMULTLIT_S
03929 #undef GAN_MAT_SUMSQR_Q
03930 #undef GAN_MAT_SUMSQR_S
03931 #undef GAN_MAT_FNORM_Q
03932 #undef GAN_MAT_FNORM_S
03933 #undef GAN_MAT_FROM_MAT_Q
03934 #undef GAN_MAT_FROM_MAT_S
03935 #undef GAN_MAT_FROM_SQUMAT_Q
03936 #undef GAN_MAT_FROM_SQUMAT_S
03937 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03938 #undef GAN_SQUMAT_FROM_SQUMAT_S
03939 
03940 /* declare functions specific to upper triangular 4x4 matrices */
03954 #define GAN_MATTYPE Gan_SquMatrix44_f
03955 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03956 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03957 #define GAN_VECTOR_TYPE Gan_Vector_f
03958 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03959 #define GAN_REALTYPE float
03960 #define GAN_MAT_FPRINT   gan_ltmat44Tf_fprint
03961 #define GAN_MAT_PRINT    gan_ltmat44Tf_print
03962 #define GAN_MAT_FSCANF   gan_ltmat44Tf_fscanf
03963 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX44_F
03964 
03965 #define gan_ltmat44Tf_fwrite gan_ltmat44f_fwrite
03966 #define gan_ltmat44Tf_fread  gan_ltmat44f_fread
03967 
03980 /* This library is free software; you can redistribute it and/or
03981    modify it under the terms of the GNU Lesser General Public
03982    License as published by the Free Software Foundation; either
03983    version 2.1 of the License, or (at your option) any later version.
03984 
03985    This library is distributed in the hope that it will be useful,
03986    but WITHOUT ANY WARRANTY; without even the implied warranty of
03987    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03988    Lesser General Public License for more details.
03989 
03990    You should have received a copy of the GNU Lesser General Public
03991    License along with this library; if not, write to the Free Software
03992    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03993 */
03994 
03995 /* function declarations for functions common to all small square matrix
03996  * types */
03997 
03998 
03999 
04000 /* documentation for macros defined in individual header files */
04001 
04068 #undef GAN_SQUMAT_IDENT_Q
04069 #undef GAN_SQUMAT_IDENT_S
04070 #undef GAN_SQUMAT_TPOSE_Q
04071 #undef GAN_SQUMAT_TPOSE_S
04072 #undef GAN_SQUMAT_TPOSE_I
04073 #undef GAN_MAT_SADDT_Q
04074 #undef GAN_MAT_SADDT_S
04075 #undef GAN_SQUMATI_MULTV_Q
04076 #undef GAN_SQUMATI_MULTV_S
04077 #undef GAN_SQUMATI_MULTV_I
04078 #undef GAN_SQUMATIT_MULTV_Q
04079 #undef GAN_SQUMATIT_MULTV_S
04080 #undef GAN_SQUMATIT_MULTV_I
04081 #undef GAN_SQUMAT_INVERT
04082 #undef GAN_SQUMAT_INVERT_Q
04083 #undef GAN_SQUMAT_INVERT_S
04084 #undef GAN_SQUMAT_INVERT_I
04085 #undef GAN_SQUMAT_ADJOINT_Q
04086 #undef GAN_SQUMAT_ADJOINT_S
04087 #undef GAN_SQUMAT_ADJOINTT_Q
04088 #undef GAN_SQUMAT_ADJOINTT_S
04089 #undef GAN_SQUMAT_DET_Q
04090 #undef GAN_SQUMAT_DET_S
04091 #undef GAN_SQUMAT_TRACE_Q
04092 #undef GAN_SQUMAT_TRACE_S
04093 
04106 /* This library is free software; you can redistribute it and/or
04107    modify it under the terms of the GNU Lesser General Public
04108    License as published by the Free Software Foundation; either
04109    version 2.1 of the License, or (at your option) any later version.
04110 
04111    This library is distributed in the hope that it will be useful,
04112    but WITHOUT ANY WARRANTY; without even the implied warranty of
04113    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04114    Lesser General Public License for more details.
04115 
04116    You should have received a copy of the GNU Lesser General Public
04117    License along with this library; if not, write to the Free Software
04118    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04119 */
04120 
04121 /* function declarations for functions common to all small vector types */
04122 
04123 
04124 
04125 /* documentation for macros defined in individual header files */
04126 
04297 /* This library is free software; you can redistribute it and/or
04298    modify it under the terms of the GNU Lesser General Public
04299    License as published by the Free Software Foundation; either
04300    version 2.1 of the License, or (at your option) any later version.
04301 
04302    This library is distributed in the hope that it will be useful,
04303    but WITHOUT ANY WARRANTY; without even the implied warranty of
04304    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04305    Lesser General Public License for more details.
04306 
04307    You should have received a copy of the GNU Lesser General Public
04308    License along with this library; if not, write to the Free Software
04309    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04310 */
04311 
04312 #undef GAN_MATTYPE
04313 #undef GAN_MATRIX_TYPE
04314 #undef GAN_SQUMATRIX_TYPE
04315 #undef GAN_VECTOR_TYPE
04316 #undef GAN_MAT_ELEMENT_TYPE
04317 #undef GAN_REALTYPE
04318 #undef GAN_FWRITE_LENDIAN
04319 #undef GAN_FREAD_LENDIAN
04320 #undef GAN_VECTYPE1
04321 #undef GAN_VECTYPE2
04322 #undef GAN_MATTYPEL
04323 #undef GAN_MATTYPER
04324 #undef GAN_SQUMATTYPEL
04325 #undef GAN_SQUMATTYPER
04326 #undef GAN_FIXED_MATRIX_TYPE
04327 #undef GAN_MAT_FPRINT
04328 #undef GAN_MAT_PRINT
04329 #undef GAN_MAT_FSCANF
04330 #undef GAN_MAT_FWRITE
04331 #undef GAN_MAT_FREAD
04332 #undef GAN_MAT_ZERO_Q
04333 #undef GAN_MAT_ZERO_S
04334 #undef GAN_MAT_COPY_Q
04335 #undef GAN_MAT_COPY_S
04336 #undef GAN_MAT_SCALE_Q
04337 #undef GAN_MAT_SCALE_S
04338 #undef GAN_MAT_SCALE_I
04339 #undef GAN_MAT_DIVIDE_Q
04340 #undef GAN_MAT_DIVIDE_S
04341 #undef GAN_MAT_DIVIDE_I
04342 #undef GAN_MAT_NEGATE_Q
04343 #undef GAN_MAT_NEGATE_S
04344 #undef GAN_MAT_NEGATE_I
04345 #undef GAN_MAT_UNIT_Q
04346 #undef GAN_MAT_UNIT_S
04347 #undef GAN_MAT_UNIT_I
04348 #undef GAN_MAT_ADD_Q
04349 #undef GAN_MAT_ADD_I1
04350 #undef GAN_MAT_ADD_I2
04351 #undef GAN_MAT_INCREMENT
04352 #undef GAN_MAT_ADD_S
04353 #undef GAN_MAT_SUB_Q
04354 #undef GAN_MAT_SUB_I1
04355 #undef GAN_MAT_SUB_I2
04356 #undef GAN_MAT_DECREMENT
04357 #undef GAN_MAT_SUB_S
04358 #undef GAN_VEC_OUTER_Q
04359 #undef GAN_VEC_OUTER_S
04360 #undef GAN_MAT_MULTV_Q
04361 #undef GAN_MAT_MULTV_S
04362 #undef GAN_MAT_MULTV_I
04363 #undef GAN_MATT_MULTV_Q
04364 #undef GAN_MATT_MULTV_S
04365 #undef GAN_MATT_MULTV_I
04366 #undef GAN_MAT_LMULTM_Q
04367 #undef GAN_MAT_LMULTM_S
04368 #undef GAN_MAT_LMULTMT_Q
04369 #undef GAN_MAT_LMULTMT_S
04370 #undef GAN_MAT_RMULTM_Q
04371 #undef GAN_MAT_RMULTM_S
04372 #undef GAN_MAT_RMULTMT_Q
04373 #undef GAN_MAT_RMULTMT_S
04374 #undef GAN_MAT_LMULTMT_SYM_Q
04375 #undef GAN_MAT_LMULTMT_SYM_S
04376 #undef GAN_MAT_RMULTMT_SYM_Q
04377 #undef GAN_MAT_RMULTMT_SYM_S
04378 #undef GAN_MAT_LMULTS_Q
04379 #undef GAN_MAT_LMULTS_S
04380 #undef GAN_MAT_RMULTS_Q
04381 #undef GAN_MAT_RMULTS_S
04382 #undef GAN_SYMMATL_LRMULT_Q
04383 #undef GAN_SYMMATL_LRMULT_S
04384 #undef GAN_SYMMATR_LRMULT_Q
04385 #undef GAN_SYMMATR_LRMULT_S
04386 #undef GAN_MAT_LMULTL_Q
04387 #undef GAN_MAT_LMULTL_S
04388 #undef GAN_MAT_LMULTL_I
04389 #undef GAN_MAT_LMULTLI_Q
04390 #undef GAN_MAT_LMULTLI_S
04391 #undef GAN_MAT_LMULTLI_I
04392 #undef GAN_MAT_LMULTLT_Q
04393 #undef GAN_MAT_LMULTLT_S
04394 #undef GAN_MAT_LMULTLT_I
04395 #undef GAN_MAT_LMULTLIT_Q
04396 #undef GAN_MAT_LMULTLIT_S
04397 #undef GAN_MAT_LMULTLIT_I
04398 #undef GAN_MAT_RMULTL_Q
04399 #undef GAN_MAT_RMULTL_S
04400 #undef GAN_MAT_RMULTL_I
04401 #undef GAN_MAT_RMULTLI_Q
04402 #undef GAN_MAT_RMULTLI_S
04403 #undef GAN_MAT_RMULTLI_I
04404 #undef GAN_MAT_RMULTLT_Q
04405 #undef GAN_MAT_RMULTLT_S
04406 #undef GAN_MAT_RMULTLT_I
04407 #undef GAN_MAT_RMULTLIT_Q
04408 #undef GAN_MAT_RMULTLIT_S
04409 #undef GAN_MAT_RMULTLIT_I
04410 #undef GAN_MAT_SRMULTT_Q
04411 #undef GAN_MAT_SRMULTT_S
04412 #undef GAN_MAT_SRMULTT_I
04413 #undef GAN_MAT_SLMULTT_Q
04414 #undef GAN_MAT_SLMULTT_S
04415 #undef GAN_MAT_SLMULTT_I
04416 #undef GAN_MAT_RMULTLIT_S
04417 #undef GAN_MAT_SUMSQR_Q
04418 #undef GAN_MAT_SUMSQR_S
04419 #undef GAN_MAT_FNORM_Q
04420 #undef GAN_MAT_FNORM_S
04421 #undef GAN_MAT_FROM_MAT_Q
04422 #undef GAN_MAT_FROM_MAT_S
04423 #undef GAN_MAT_FROM_SQUMAT_Q
04424 #undef GAN_MAT_FROM_SQUMAT_S
04425 #undef GAN_SQUMAT_FROM_SQUMAT_Q
04426 #undef GAN_SQUMAT_FROM_SQUMAT_S
04427 
04436 #ifdef __cplusplus
04437 }
04438 #endif
04439 
04440 #endif /* #ifndef _GAN_4X4MATRIXF_H */

Generated on Sat May 21 23:52:47 2005 by  doxygen 1.4.3