Main Page   Modules   Compound List   File List   Compound Members   File Members  

2x2matrixf.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_2X2MATRIXF_H
00030 #define _GAN_2X2MATRIXF_H
00031 
00032 #include <stdlib.h>
00033 #include <math.h>
00034 #include <stdio.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_REPEAT22_H
00065 #define _GAN_REPEAT22_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 
00206 #ifdef __cplusplus
00207 extern "C" {
00208 #endif
00209 
00210 /* macros for constructing dual two-fold repetitions */
00211 
00212 #define GAN_FREP22_A(a,b,p1,p2,q1,q2,r11,r12,r21,r22)\
00213            (GAN_FREP2_A(a,b,p1##q1,p1##q2,r11,r12),\
00214             GAN_FREP2_A(a,b,p2##q1,p2##q2,r21,r22))
00215 #define GAN_FREP22_A_C(a,b,r11,r12,r21,r22) \
00216            GAN_FREP22_A(a,b,x,y,x,y,r11,r12,r21,r22)
00217 
00218 /* most general macros */
00219 #define GAN_REP22_ABCS(a,b,c,d,p1,p2,q1,q2,r1,r2,s1,s2,t1,t2,u1,u2)\
00220  (GAN_REP2_ABCS(a,b,c,d,p1##q1,p1##q2,r1##s1,r1##s2,t1##u1,t1##u2),\
00221   GAN_REP2_ABCS(a,b,c,d,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2))
00222 #define GAN_REP22_ABC(a,b,c,p1,p2,q1,q2,r1,r2,s1,s2,t1,t2,u1,u2)\
00223  (GAN_REP2_ABC(a,b,c,p1##q1,p1##q2,r1##s1,r1##s2,t1##u1,t1##u2),\
00224   GAN_REP2_ABC(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2))
00225 
00226 #define GAN_REP22_AAAS(a,b,c,d,p1,p2,q1,q2)\
00227            GAN_REP22_ABCS(a,b,c,d,p1,p2,q1,q2,p1,p2,q1,q2,p1,p2,q1,q2)
00228 #define GAN_REP22_AAA(a,b,c,p1,p2,q1,q2)\
00229            GAN_REP22_ABC(a,b,c,p1,p2,q1,q2,p1,p2,q1,q2,p1,p2,q1,q2)
00230 
00231 #define GAN_REP22_ABS(a,b,c,p1,p2,q1,q2,r1,r2,s1,s2)\
00232  (GAN_REP2_ABS(a,b,c,p1##q1,p1##q2,r1##s1,r1##s2),\
00233   GAN_REP2_ABS(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2))
00234 #define GAN_REP22_AB(a,b,p1,p2,q1,q2,r1,r2,s1,s2)\
00235  (GAN_REP2_AB(a,b,p1##q1,p1##q2,r1##s1,r1##s2),\
00236   GAN_REP2_AB(a,b,p2##q1,p2##q2,r2##s1,r2##s2))
00237 
00238 #define GAN_REP22_AAS(a,b,c,p1,p2,q1,q2)\
00239             GAN_REP22_ABS(a,b,c,p1,p2,q1,q2,p1,p2,q1,q2)
00240 #define GAN_REP22_AA(a,b,p1,p2,q1,q2)\
00241             GAN_REP22_AB(a,b,p1,p2,q1,q2,p1,p2,q1,q2)
00242 
00243 #define GAN_REP22_AS(a,b,p1,p2,q1,q2)\
00244  (GAN_REP2_AS(a,b,p1##q1,p1##q2), GAN_REP2_AS(a,b,p2##q1,p2##q2))
00245 #define GAN_REP22_A(a,p1,p2,q1,q2)\
00246  (GAN_REP2_A(a,p1##q1,p1##q2), GAN_REP2_A(a,p2##q1,p2##q2))
00247 
00248 /* macros specific to xx, xy etc coordinates */
00249 #define GAN_REP22_AS_C(a,b) GAN_REP22_AS(a,b,x,y,x,y)
00250 #define GAN_REP22_AAS_C(a,b,c) GAN_REP22_AAS(a,b,c,x,y,x,y)
00251 #define GAN_REP22_AAAS_C(a,b,c,d) GAN_REP22_AAAS(a,b,c,d,x,y,x,y)
00252 #define GAN_REP22_A_C(a) GAN_REP22_A(a,x,y,x,y)
00253 #define GAN_REP22_AA_C(a,b) GAN_REP22_AA(a,b,x,y,x,y)
00254 #define GAN_REP22_AAA_C(a,b,c) GAN_REP22_AAA(a,b,c,x,y,x,y)
00255 
00256 /* macro for transpose operation */
00257 #define GAN_REP22_AAT(a,b,p1,p2,q1,q2)\
00258  (GAN_REP2_AB(a,b,p1##q1,p1##q2,p1##q1,p2##q1),\
00259   GAN_REP2_AB(a,b,p2##q1,p2##q2,p1##q2,p2##q2))
00260 #define GAN_REP22_AAT_C(a,b) GAN_REP22_AAT(a,b,x,y,x,y)
00261 
00262 /* macros for operations on lower triangle of matrices only */
00263 #define GAN_FREP22L_A(a,b,p1,p2,q1,q2,r11,r21,r22)\
00264  (GAN_FREP1_A(a,b,p1##q1,r11),\
00265   GAN_FREP2_A(a,b,p2##q1,p2##q2,r21,r22))
00266 #define GAN_FREP22L_A_C(a,b,r11,r21,r22) \
00267            GAN_FREP22L_A(a,b,x,y,x,y,r11,r21,r22)
00268 
00269 #define GAN_REP22L_ABCS(a,b,c,d,p1,p2,q1,q2,r1,r2,s1,s2,t1,t2,u1,u2)\
00270  (GAN_REP1_ABCS(a,b,c,d,p1##q1,r1##s1,t1##u1),\
00271   GAN_REP2_ABCS(a,b,c,d,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2))
00272 #define GAN_REP22L_ABC(a,b,c,p1,p2,q1,q2,r1,r2,s1,s2,t1,t2,u1,u2)\
00273  (GAN_REP1_ABC(a,b,c,p1##q1,r1##s1,t1##u1),\
00274   GAN_REP2_ABC(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2))
00275 #define GAN_REP22L_AAAS(a,b,c,d,p1,p2,q1,q2)\
00276            GAN_REP22L_ABCS(a,b,c,d,p1,p2,q1,q2,p1,p2,q1,q2,p1,p2,q1,q2)
00277 #define GAN_REP22L_AAA(a,b,c,p1,p2,q1,q2)\
00278            GAN_REP22L_ABC(a,b,c,p1,p2,q1,q2,p1,p2,q1,q2,p1,p2,q1,q2)
00279 #define GAN_REP22L_ABS(a,b,c,p1,p2,q1,q2,r1,r2,s1,s2)\
00280  (GAN_REP1_ABS(a,b,c,p1##q1,r1##s1),\
00281   GAN_REP2_ABS(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2))
00282 #define GAN_REP22L_AB(a,b,p1,p2,q1,q2,r1,r2,s1,s2)\
00283  (GAN_REP1_AB(a,b,p1##q1,r1##s1),\
00284   GAN_REP2_AB(a,b,p2##q1,p2##q2,r2##s1,r2##s2))
00285 #define GAN_REP22L_AAS(a,b,c,p1,p2,q1,q2)\
00286            GAN_REP22L_ABS(a,b,c,p1,p2,q1,q2,p1,p2,q1,q2)
00287 #define GAN_REP22L_AA(a,b,p1,p2,q1,q2)\
00288            GAN_REP22L_AB(a,b,p1,p2,q1,q2,p1,p2,q1,q2)
00289 #define GAN_REP22L_AS(a,b,p1,p2,q1,q2)\
00290  (GAN_REP1_AS(a,b,p1##q1),\
00291   GAN_REP2_AS(a,b,p2##q1,p2##q2))
00292 #define GAN_REP22L_A(a,p1,p2,q1,q2)\
00293  (GAN_REP1_A(a,p1##q1),\
00294   GAN_REP2_A(a,p2##q1,p2##q2))
00295 #define GAN_REP22L_AS_C(a,b) GAN_REP22L_AS(a,b,x,y,x,y)
00296 #define GAN_REP22L_AAS_C(a,b,c) GAN_REP22L_AAS(a,b,c,x,y,x,y)
00297 #define GAN_REP22L_AAAS_C(a,b,c,d) GAN_REP22L_AAAS(a,b,c,d,x,y,x,y)
00298 #define GAN_REP22L_A_C(a) GAN_REP22L_A(a,x,y,x,y)
00299 #define GAN_REP22L_AA_C(a,b) GAN_REP22L_AA(a,b,x,y,x,y)
00300 #define GAN_REP22L_AAA_C(a,b,c) GAN_REP22L_AAA(a,b,c,x,y,x,y)
00301 #define GAN_FREP22L_A_C(a,b,r11,r21,r22)\
00302            GAN_FREP22L_A(a,b,x,y,x,y,r11,r21,r22)
00303 
00304 #ifdef __cplusplus
00305 }
00306 #endif
00307 
00308 #endif /* #ifndef _GAN_REPEAT22_H */
00309 #include <gandalf/linalg/2vectorf.h>
00323 /* This library is free software; you can redistribute it and/or
00324    modify it under the terms of the GNU Lesser General Public
00325    License as published by the Free Software Foundation; either
00326    version 2.1 of the License, or (at your option) any later version.
00327 
00328    This library is distributed in the hope that it will be useful,
00329    but WITHOUT ANY WARRANTY; without even the implied warranty of
00330    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00331    Lesser General Public License for more details.
00332 
00333    You should have received a copy of the GNU Lesser General Public
00334    License along with this library; if not, write to the Free Software
00335    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00336 */
00337 
00338 #endif /* #ifndef _GAN_MATVECF_MACROS_H */
00339 #include <gandalf/linalg/matf_gen.h>
00340 #include <gandalf/linalg/matf_square.h>
00341 
00342 #ifdef __cplusplus
00343 extern "C" {
00344 #endif
00345 
00356 
00357 typedef struct Gan_Matrix22_f
00358 {
00359    float xx, xy,
00360          yx, yy;
00361 } Gan_Matrix22_f;
00362 
00363 #ifndef NDEBUG
00364 
00365 typedef enum { GAN_SYMMETRIC_MATRIX22_F, GAN_LOWER_TRI_MATRIX22_F }
00366  Gan_SquMatrix22Type_f;
00367 #endif /* #ifndef NDEBUG */
00368 
00370 typedef struct Gan_SquMatrix22_f
00371 {
00372 #ifndef NDEBUG
00373    /* square matrix type, for setting and checking in debug mode */
00374    Gan_SquMatrix22Type_f type;
00375 #endif /* #ifndef NDEBUG */
00376 
00377    /* matrix data */
00378    float xx,
00379          yx, yy;
00380 } Gan_SquMatrix22_f;
00381 
00382 /* matrix definitions specific to 2x2 matrices */
00383 #define GAN_ST22F_FILL(A,t,XX,YX,YY)\
00384            (GAN_TEST_OP1(A,Gan_SquMatrix22_f),gan_eval((A)->type=t),\
00385             GAN_FREP22L_A_C((A)->,=,(XX),(YX),(YY)))
00386 #define GAN_ST22F_IDENT(A,t)\
00387            (GAN_TEST_OP1(A,Gan_SquMatrix22_f),gan_eval((A)->type=t),\
00388             GAN_FREP22L_A_C((A)->,=,1.0,0.0,1.0))
00389 
00390 /* generic matrix multiply operations */
00391 #define GAN_MAT22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00392  (a p1 = GAN_REP2_OP_AB(b,* c,xx,xy,q1,q2,+),\
00393   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+))
00394 #define GAN_MAT22TF_MULT1D(a,b,c,p1,p2,q1,q2)\
00395  (a p1 = GAN_REP2_OP_AB(b,* c,xx,yx,q1,q2,+),\
00396   a p2 = GAN_REP2_OP_AB(b,* c,xy,yy,q1,q2,+))
00397 
00398 /* symmetric matrix multiply operation */
00399 #define GAN_SYM22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00400  (a p1 = GAN_REP2_OP_AB(b,* c,xx,yx,q1,q2,+),\
00401   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+))
00402 
00403 /* lower triangular matrix multiply operations */
00404 #define GAN_LOW22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00405  (a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00406   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00407 #define GAN_LOW22IF_MULT1D(a,b,c,p1,p2,q1,q2)\
00408  (a p1 =  c q1 / b xx,\
00409   a p2 = (c q2 - b yx * a p1) / b yy)
00410 
00411 /* upper triangular matrix multiply operations */
00412 #define GAN_UPP22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00413  (a p1 = GAN_REP2_OP_AB(b,* c,xx,yx,q1,q2,+),\
00414   a p2 = GAN_REP1_OP_AB(b,* c,yy,q2,+))
00415 #define GAN_UPP22IF_MULT1D(a,b,c,p1,p2,q1,q2)\
00416  (a p2 =  c q2 / b yy,\
00417   a p1 = (c q1 - b yx * a p2) / b xx)
00418 
00419 /* symmetric/lower triangular square matrix definitions */
00420 #define GAN_ST22F_ZERO(A,t)\
00421            (GAN_TEST_OP1(A,Gan_SquMatrix22_f), gan_eval((A)->type=t),\
00422             GAN_REP22L_AS_C((A)->,=0.0))
00423 #define GAN_ST22F_COPY(A,B,t)\
00424            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00425             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00426             GAN_REP22L_AA_C((B)->,=(A)->))
00427 #define GAN_ST22F_SCALE(A,a,B,t)\
00428            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00429             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00430             GAN_REP22L_AAS_C((B)->,=(A)->,*(a)))
00431 #define GAN_ST22F_DIVIDE(A,a,B,t)\
00432            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00433             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00434             GAN_REP22L_AAS_C((B)->,=(A)->,/(a)))
00435 #define GAN_ST22F_NEGATE(A,B,t)\
00436            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00437             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00438             GAN_REP22L_AA_C((B)->,=-(A)->))
00439 #define GAN_ST22F_ADD(A,B,C,t)\
00440          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix22_f,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00441           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00442           GAN_REP22L_AAA_C((C)->,=(A)->,+(B)->))
00443 #define GAN_ST22F_SUB(A,B,C,t)\
00444          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix22_f,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00445           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00446           GAN_REP22L_AAA_C((C)->,=(A)->,-(B)->))
00447 
00448 /* declare functions specific to generic 2x2 matrices */
00462 /* This library is free software; you can redistribute it and/or
00463    modify it under the terms of the GNU Lesser General Public
00464    License as published by the Free Software Foundation; either
00465    version 2.1 of the License, or (at your option) any later version.
00466 
00467    This library is distributed in the hope that it will be useful,
00468    but WITHOUT ANY WARRANTY; without even the implied warranty of
00469    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00470    Lesser General Public License for more details.
00471 
00472    You should have received a copy of the GNU Lesser General Public
00473    License along with this library; if not, write to the Free Software
00474    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00475 */
00476 
00477 #ifndef _GAN_2X2MATF_H
00478 
00493 Gan_Matrix22_f *gan_mat22f_fill_q ( Gan_Matrix22_f *A,
00494                                     float XX, float XY, float YX, float YY );
00495 
00516 void gan_mat22f_get_rows_q ( Gan_Matrix22_f *A,
00517                              Gan_Vector2_f *p, Gan_Vector2_f *q );
00518 
00530 void gan_mat22f_get_cols_q ( Gan_Matrix22_f *A,
00531                              Gan_Vector2_f *p, Gan_Vector2_f *q );
00532 
00538 #endif /* #ifndef _GAN_2X2MATF_H */
00539 
00540 #define GAN_MATTYPE Gan_Matrix22_f
00541 #define GAN_MATRIX_TYPE Gan_Matrix_f
00542 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00543 #define GAN_VECTOR_TYPE Gan_Vector_f
00544 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00545 #define GAN_REALTYPE float
00546 #define GAN_VECTYPE1 Gan_Vector2_f
00547 #define GAN_VECTYPE2 Gan_Vector2_f
00548 #define GAN_MATTYPEL Gan_Matrix22_f
00549 #define GAN_MATTYPER Gan_Matrix22_f
00550 #define GAN_SQUMATTYPEL Gan_SquMatrix22_f
00551 #define GAN_SQUMATTYPER Gan_SquMatrix22_f
00552 #define GAN_MAT_FPRINT                     gan_mat22f_fprint
00553 #define GAN_MAT_PRINT                      gan_mat22f_print
00554 #define GAN_MAT_FSCANF                     gan_mat22f_fscanf
00555 #define GAN_MAT_FWRITE                     gan_mat22f_fwrite
00556 #define GAN_MAT_FREAD                      gan_mat22f_fread
00557 #define GAN_MAT_ZERO_Q                     gan_mat22f_zero_q
00558 #define GAN_MAT_ZERO_S                     gan_mat22f_zero_s
00559 #define GAN_MAT_COPY_Q                     gan_mat22f_copy_q
00560 #define GAN_MAT_COPY_S                     gan_mat22f_copy_s
00561 #define GAN_MAT_SCALE_Q                    gan_mat22f_scale_q
00562 #define GAN_MAT_SCALE_I                    gan_mat22f_scale_i
00563 #define GAN_MAT_SCALE_S                    gan_mat22f_scale_s
00564 #define GAN_MAT_DIVIDE_Q                   gan_mat22f_divide_q
00565 #define GAN_MAT_DIVIDE_I                   gan_mat22f_divide_i
00566 #define GAN_MAT_DIVIDE_S                   gan_mat22f_divide_s
00567 #define GAN_MAT_NEGATE_Q                   gan_mat22f_negate_q
00568 #define GAN_MAT_NEGATE_I                   gan_mat22f_negate_i
00569 #define GAN_MAT_NEGATE_S                   gan_mat22f_negate_s
00570 #define GAN_MAT_UNIT_Q                     gan_mat22f_unit_q
00571 #define GAN_MAT_UNIT_I                     gan_mat22f_unit_i
00572 #define GAN_MAT_UNIT_S                     gan_mat22f_unit_s
00573 #define GAN_MAT_ADD_Q                      gan_mat22f_add_q
00574 #define GAN_MAT_ADD_I1                     gan_mat22f_add_i1
00575 #define GAN_MAT_ADD_I2                     gan_mat22f_add_i2
00576 #define GAN_MAT_INCREMENT                  gan_mat22f_increment
00577 #define GAN_MAT_ADD_S                      gan_mat22f_add_s
00578 #define GAN_MAT_SUB_Q                      gan_mat22f_sub_q
00579 #define GAN_MAT_SUB_I1                     gan_mat22f_sub_i1
00580 #define GAN_MAT_SUB_I2                     gan_mat22f_sub_i2
00581 #define GAN_MAT_DECREMENT                  gan_mat22f_decrement
00582 #define GAN_MAT_SUB_S                      gan_mat22f_sub_s
00583 #define GAN_VEC_OUTER_Q                    gan_vec22f_outer_q
00584 #define GAN_VEC_OUTER_S                    gan_vec22f_outer_s
00585 #define GAN_MAT_MULTV_Q                    gan_mat22f_multv2_q
00586 #define GAN_MAT_MULTV_S                    gan_mat22f_multv2_s
00587 #define GAN_MATT_MULTV_Q                   gan_mat22Tf_multv2_q
00588 #define GAN_MATT_MULTV_S                   gan_mat22Tf_multv2_s
00589 #define GAN_MAT_LMULTMT_Q                  gan_mat22f_lmultm22T_q
00590 #define GAN_MAT_LMULTMT_S                  gan_mat22f_lmultm22T_s
00591 #define GAN_MAT_RMULTM_Q                   gan_mat22f_rmultm22_q
00592 #define GAN_MAT_RMULTM_S                   gan_mat22f_rmultm22_s
00593 #define GAN_MAT_RMULTMT_Q                  gan_mat22f_rmultm22T_q
00594 #define GAN_MAT_RMULTMT_S                  gan_mat22f_rmultm22T_s
00595 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat22f_lmultm22T_sym_q
00596 #define GAN_MAT_LMULTMT_SYM_S              gan_mat22f_lmultm22T_sym_s
00597 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat22f_rmultm22T_sym_q
00598 #define GAN_MAT_RMULTMT_SYM_S              gan_mat22f_rmultm22T_sym_s
00599 #define GAN_MAT_SLMULTT_Q                  gan_mat22f_slmultT_q
00600 #define GAN_MAT_SLMULTT_S                  gan_mat22f_slmultT_s
00601 #define GAN_MAT_SRMULTT_Q                  gan_mat22f_srmultT_q
00602 #define GAN_MAT_SRMULTT_S                  gan_mat22f_srmultT_s
00603 #define GAN_MAT_LMULTS_Q                   gan_mat22f_lmults22_q
00604 #define GAN_MAT_LMULTS_S                   gan_mat22f_lmults22_s
00605 #define GAN_MAT_RMULTS_Q                   gan_mat22f_rmults22_q
00606 #define GAN_MAT_RMULTS_S                   gan_mat22f_rmults22_s
00607 #define GAN_SYMMATL_LRMULT_Q               gan_symmat22f_lrmultm22T_q
00608 #define GAN_SYMMATL_LRMULT_S               gan_symmat22f_lrmultm22T_s
00609 #define GAN_SYMMATR_LRMULT_Q               gan_symmat22f_lrmultm22_q
00610 #define GAN_SYMMATR_LRMULT_S               gan_symmat22f_lrmultm22_s
00611 #define GAN_MAT_LMULTL_Q                   gan_mat22f_lmultl22_q
00612 #define GAN_MAT_LMULTL_S                   gan_mat22f_lmultl22_s
00613 #define GAN_MAT_LMULTL_I                   gan_mat22f_lmultl22_i
00614 #define GAN_MAT_LMULTLI_Q                  gan_mat22f_lmultl22I_q
00615 #define GAN_MAT_LMULTLI_S                  gan_mat22f_lmultl22I_s
00616 #define GAN_MAT_LMULTLI_I                  gan_mat22f_lmultl22I_i
00617 #define GAN_MAT_LMULTLT_Q                  gan_mat22f_lmultl22T_q
00618 #define GAN_MAT_LMULTLT_S                  gan_mat22f_lmultl22T_s
00619 #define GAN_MAT_LMULTLT_I                  gan_mat22f_lmultl22T_i
00620 #define GAN_MAT_LMULTLIT_Q                 gan_mat22f_lmultl22IT_q
00621 #define GAN_MAT_LMULTLIT_S                 gan_mat22f_lmultl22IT_s
00622 #define GAN_MAT_LMULTLIT_I                 gan_mat22f_lmultl22IT_i
00623 #define GAN_MAT_RMULTL_Q                   gan_mat22f_rmultl22_q
00624 #define GAN_MAT_RMULTL_S                   gan_mat22f_rmultl22_s
00625 #define GAN_MAT_RMULTL_I                   gan_mat22f_rmultl22_i
00626 #define GAN_MAT_RMULTLI_Q                  gan_mat22f_rmultl22I_q
00627 #define GAN_MAT_RMULTLI_S                  gan_mat22f_rmultl22I_s
00628 #define GAN_MAT_RMULTLI_I                  gan_mat22f_rmultl22I_i
00629 #define GAN_MAT_RMULTLT_Q                  gan_mat22f_rmultl22T_q
00630 #define GAN_MAT_RMULTLT_S                  gan_mat22f_rmultl22T_s
00631 #define GAN_MAT_RMULTLT_I                  gan_mat22f_rmultl22T_i
00632 #define GAN_MAT_RMULTLIT_Q                 gan_mat22f_rmultl22IT_q
00633 #define GAN_MAT_RMULTLIT_S                 gan_mat22f_rmultl22IT_s
00634 #define GAN_MAT_RMULTLIT_I                 gan_mat22f_rmultl22IT_i
00635 #define GAN_MAT_SUMSQR_Q                   gan_mat22f_sumsqr_q
00636 #define GAN_MAT_SUMSQR_S                   gan_mat22f_sumsqr_s
00637 #define GAN_MAT_FNORM_Q                    gan_mat22f_Fnorm_q
00638 #define GAN_MAT_FNORM_S                    gan_mat22f_Fnorm_s
00639 #define GAN_MAT_FROM_MAT_Q                 gan_mat22f_from_matf_q
00640 #define GAN_MAT_FROM_MAT_S                 gan_mat22f_from_matf_s
00641 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat22f_from_squmatf_q
00642 #define GAN_MAT_FROM_SQUMAT_S              gan_mat22f_from_squmatf_s
00643 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat22f_from_squmatf_q
00644 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat22f_from_squmatf_s
00645 
00646 #define GAN_SQUMAT_IDENT_Q    gan_mat22f_ident_q
00647 #define GAN_SQUMAT_IDENT_S    gan_mat22f_ident_s
00648 #define GAN_SQUMAT_TPOSE_Q    gan_mat22f_tpose_q
00649 #define GAN_SQUMAT_TPOSE_S    gan_mat22f_tpose_s
00650 #define GAN_SQUMAT_TPOSE_I    gan_mat22f_tpose_i
00651 #define GAN_MAT_SADDT_Q       gan_mat22f_saddT_q
00652 #define GAN_MAT_SADDT_S       gan_mat22f_saddT_s
00653 #define GAN_SQUMAT_INVERT     gan_mat22f_invert
00654 #define GAN_SQUMAT_INVERT_Q   gan_mat22f_invert_q
00655 #define GAN_SQUMAT_INVERT_S   gan_mat22f_invert_s
00656 #define GAN_SQUMAT_INVERT_I   gan_mat22f_invert_i
00657 #define GAN_SQUMAT_ADJOINT_Q  gan_mat22f_adjoint_q
00658 #define GAN_SQUMAT_ADJOINT_S  gan_mat22f_adjoint_s
00659 #define GAN_SQUMAT_ADJOINTT_Q gan_mat22f_adjointT_q
00660 #define GAN_SQUMAT_ADJOINTT_S gan_mat22f_adjointT_s
00661 #define GAN_SQUMAT_DET_Q      gan_mat22f_det_q
00662 #define GAN_SQUMAT_DET_S      gan_mat22f_det_s
00663 #define GAN_SQUMAT_TRACE_Q    gan_mat22f_trace_q
00664 #define GAN_SQUMAT_TRACE_S    gan_mat22f_trace_s
00665 
00666 #ifndef _GAN_2X2MATF_H
00667 #define _GAN_2X2MATF_H
00668 
00669 
00670 #endif /* #ifndef _GAN_2X2MATF_H */
00671 
00684 /* This library is free software; you can redistribute it and/or
00685    modify it under the terms of the GNU Lesser General Public
00686    License as published by the Free Software Foundation; either
00687    version 2.1 of the License, or (at your option) any later version.
00688 
00689    This library is distributed in the hope that it will be useful,
00690    but WITHOUT ANY WARRANTY; without even the implied warranty of
00691    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00692    Lesser General Public License for more details.
00693 
00694    You should have received a copy of the GNU Lesser General Public
00695    License along with this library; if not, write to the Free Software
00696    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00697 */
00698 
00699 /* function declarations for functions common to all small square matrix
00700  * types */
00701 
00702 
00703 
00704 /* documentation for macros defined in individual header files */
00705 
00718 Gan_Matrix22_f *gan_mat22f_ident_q ( Gan_Matrix22_f *A );
00719 
00737 Gan_Matrix22_f *gan_mat22f_tpose_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00738 
00756 Gan_SquMatrix22_f *gan_mat22f_saddT_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
00757 
00788 Gan_Matrix22_f *gan_mat22f_invert_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00789 
00798 Gan_Matrix22_f *gan_mat22f_invert_i ( Gan_Matrix22_f *A );
00799 
00814 float gan_mat22f_det_q ( Gan_Matrix22_f *A );
00815 
00821 float gan_mat22f_trace_q ( Gan_Matrix22_f *A );
00822 
00828 #undef GAN_SQUMAT_IDENT_Q
00829 #undef GAN_SQUMAT_IDENT_S
00830 #undef GAN_SQUMAT_TPOSE_Q
00831 #undef GAN_SQUMAT_TPOSE_S
00832 #undef GAN_SQUMAT_TPOSE_I
00833 #undef GAN_MAT_SADDT_Q
00834 #undef GAN_MAT_SADDT_S
00835 #undef GAN_SQUMATI_MULTV_Q
00836 #undef GAN_SQUMATI_MULTV_S
00837 #undef GAN_SQUMATI_MULTV_I
00838 #undef GAN_SQUMATIT_MULTV_Q
00839 #undef GAN_SQUMATIT_MULTV_S
00840 #undef GAN_SQUMATIT_MULTV_I
00841 #undef GAN_SQUMAT_INVERT
00842 #undef GAN_SQUMAT_INVERT_Q
00843 #undef GAN_SQUMAT_INVERT_S
00844 #undef GAN_SQUMAT_INVERT_I
00845 #undef GAN_SQUMAT_ADJOINT_Q
00846 #undef GAN_SQUMAT_ADJOINT_S
00847 #undef GAN_SQUMAT_ADJOINTT_Q
00848 #undef GAN_SQUMAT_ADJOINTT_S
00849 #undef GAN_SQUMAT_DET_Q
00850 #undef GAN_SQUMAT_DET_S
00851 #undef GAN_SQUMAT_TRACE_Q
00852 #undef GAN_SQUMAT_TRACE_S
00853 
00866 /* This library is free software; you can redistribute it and/or
00867    modify it under the terms of the GNU Lesser General Public
00868    License as published by the Free Software Foundation; either
00869    version 2.1 of the License, or (at your option) any later version.
00870 
00871    This library is distributed in the hope that it will be useful,
00872    but WITHOUT ANY WARRANTY; without even the implied warranty of
00873    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00874    Lesser General Public License for more details.
00875 
00876    You should have received a copy of the GNU Lesser General Public
00877    License along with this library; if not, write to the Free Software
00878    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00879 */
00880 
00881 /* function declarations for functions common to all small vector types */
00882 
00883 
00884 
00885 /* documentation for macros defined in individual header files */
00886 
00897 Gan_Matrix22_f *gan_mat22f_zero_q ( Gan_Matrix22_f *A );
00898 
00915 Gan_Matrix22_f *gan_mat22f_copy_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00916 
00934 Gan_Matrix22_f *gan_mat22f_scale_q ( Gan_Matrix22_f *A, float a,
00935                                Gan_Matrix22_f *B );
00936 
00944 Gan_Matrix22_f *gan_mat22f_scale_i ( Gan_Matrix22_f *A, float a );
00945 
00954 Gan_Matrix22_f *gan_mat22f_divide_q ( Gan_Matrix22_f *A, float a,
00955                                 Gan_Matrix22_f *B );
00956 
00964 Gan_Matrix22_f *gan_mat22f_divide_i ( Gan_Matrix22_f *A, float a );
00965 
00973 Gan_Matrix22_f *gan_mat22f_negate_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00974 
00982 Gan_Matrix22_f *gan_mat22f_negate_i ( Gan_Matrix22_f *A );
00983 
00991 Gan_Matrix22_f *gan_mat22f_unit_i ( Gan_Matrix22_f *A );
00992 
01010 Gan_Matrix22_f *gan_mat22f_add_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B, Gan_Matrix22_f *C );
01011 
01020 Gan_Matrix22_f *gan_mat22f_add_i1 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01021 
01030 Gan_Matrix22_f *gan_mat22f_add_i2 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01031 
01040 Gan_Matrix22_f *gan_mat22f_increment ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01041 
01059 Gan_Matrix22_f *gan_mat22f_sub_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B, Gan_Matrix22_f *C );
01060 
01069 Gan_Matrix22_f *gan_mat22f_sub_i1 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01070 
01079 Gan_Matrix22_f *gan_mat22f_sub_i2 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01080 
01089 Gan_Matrix22_f *gan_mat22f_decrement ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01090 
01108 Gan_Matrix22_f *gan_vec22f_outer_q ( Gan_Vector2_f *p, Gan_Vector2_f *q,
01109                                Gan_Matrix22_f *A );
01110 
01119 Gan_Vector2_f *gan_mat22f_multv2_q ( Gan_Matrix22_f *A, Gan_Vector2_f *p,
01120                                 Gan_Vector2_f *q );
01121 
01122 
01131 Gan_Vector2_f *gan_mat22Tf_multv2_q ( Gan_Matrix22_f *A, Gan_Vector2_f *p,
01132                                  Gan_Vector2_f *q );
01133 
01134 
01154 Gan_Matrix22_f *gan_mat22f_lmultm22T_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B,
01155                                  Gan_Matrix22_f *C );
01156 
01166 Gan_Matrix22_f *gan_mat22f_rmultm22_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B,
01167                                 Gan_Matrix22_f *C );
01168 
01178 Gan_Matrix22_f *gan_mat22f_rmultm22T_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B,
01179                                  Gan_Matrix22_f *C );
01180 
01192 Gan_SquMatrix22_f *gan_mat22f_lmultm22T_sym_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B,
01193                                          Gan_SquMatrix22_f *C );
01194 
01206 Gan_SquMatrix22_f *gan_mat22f_rmultm22T_sym_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B,
01207                                          Gan_SquMatrix22_f *C );
01208 
01217 Gan_Matrix22_f *gan_mat22f_lmults22_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01218                                 Gan_Matrix22_f *C );
01219 
01228 Gan_Matrix22_f *gan_mat22f_rmults22_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01229                                 Gan_Matrix22_f *C );
01230 
01250 Gan_SquMatrix22_f *gan_symmat22f_lrmultm22T_q ( Gan_SquMatrix22_f *A, Gan_Matrix22_f *B,
01251                                         Gan_Matrix22_f *C, Gan_SquMatrix22_f *D );
01252 
01263 Gan_SquMatrix22_f *gan_symmat22f_lrmultm22_q ( Gan_SquMatrix22_f *A, Gan_Matrix22_f *B,
01264                                         Gan_Matrix22_f *C, Gan_SquMatrix22_f *D );
01265 
01284 Gan_Matrix22_f *gan_mat22f_lmultl22_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01285                                 Gan_Matrix22_f *C );
01286 
01296 Gan_Matrix22_f *gan_mat22f_lmultl22I_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01297                                  Gan_Matrix22_f *C );
01298 
01308 Gan_Matrix22_f *gan_mat22f_lmultl22T_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01309                                  Gan_Matrix22_f *C );
01310 
01320 Gan_Matrix22_f *gan_mat22f_lmultl22IT_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01321                                   Gan_Matrix22_f *C );
01322 
01332 Gan_Matrix22_f *gan_mat22f_rmultl22_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01333                                 Gan_Matrix22_f *C );
01334 
01344 Gan_Matrix22_f *gan_mat22f_rmultl22I_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01345                                  Gan_Matrix22_f *C );
01346 
01356 Gan_Matrix22_f *gan_mat22f_rmultl22T_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01357                                  Gan_Matrix22_f *C );
01358 
01368 Gan_Matrix22_f *gan_mat22f_rmultl22IT_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B,
01369                                   Gan_Matrix22_f *C );
01370 
01380 Gan_Matrix22_f *gan_mat22f_lmultl22_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01381 
01391 Gan_Matrix22_f *gan_mat22f_lmultl22I_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01392 
01402 Gan_Matrix22_f *gan_mat22f_lmultl22T_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01403 
01413 Gan_Matrix22_f *gan_mat22f_lmultl22IT_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01414 
01424 Gan_Matrix22_f *gan_mat22f_rmultl22_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01425 
01435 Gan_Matrix22_f *gan_mat22f_rmultl22I_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01436 
01446 Gan_Matrix22_f *gan_mat22f_rmultl22T_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01447 
01457 Gan_Matrix22_f *gan_mat22f_rmultl22IT_i ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01458 
01467 Gan_SquMatrix22_f *gan_mat22f_slmultT_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01468 
01469 
01478 Gan_SquMatrix22_f *gan_mat22f_srmultT_q ( Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01479 
01480 
01495 float gan_mat22f_sumsqr_q ( Gan_Matrix22_f *A );
01496 
01503 float gan_mat22f_Fnorm_q ( Gan_Matrix22_f *A );
01504 
01522 Gan_Matrix22_f *gan_mat22f_from_matf_q ( Gan_Matrix_f *A, Gan_Matrix22_f *B );
01523 
01532 Gan_Matrix22_f *gan_mat22f_from_squmatf_q ( Gan_SquMatrix_f *A, Gan_Matrix22_f *B );
01533 
01542 Gan_SquMatrix22_f *gan_squmat22f_from_squmatf_q ( Gan_SquMatrix_f *A,
01543                                             Gan_SquMatrix22_f *B );
01544 
01563 /* This library is free software; you can redistribute it and/or
01564    modify it under the terms of the GNU Lesser General Public
01565    License as published by the Free Software Foundation; either
01566    version 2.1 of the License, or (at your option) any later version.
01567 
01568    This library is distributed in the hope that it will be useful,
01569    but WITHOUT ANY WARRANTY; without even the implied warranty of
01570    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01571    Lesser General Public License for more details.
01572 
01573    You should have received a copy of the GNU Lesser General Public
01574    License along with this library; if not, write to the Free Software
01575    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01576 */
01577 
01578 #undef GAN_MATTYPE
01579 #undef GAN_MATRIX_TYPE
01580 #undef GAN_SQUMATRIX_TYPE
01581 #undef GAN_VECTOR_TYPE
01582 #undef GAN_MAT_ELEMENT_TYPE
01583 #undef GAN_REALTYPE
01584 #undef GAN_VECTYPE1
01585 #undef GAN_VECTYPE2
01586 #undef GAN_MATTYPEL
01587 #undef GAN_MATTYPER
01588 #undef GAN_SQUMATTYPEL
01589 #undef GAN_SQUMATTYPER
01590 #undef GAN_FIXED_MATRIX_TYPE
01591 #undef GAN_MAT_FPRINT
01592 #undef GAN_MAT_PRINT
01593 #undef GAN_MAT_FSCANF
01594 #undef GAN_MAT_FWRITE
01595 #undef GAN_MAT_FREAD
01596 #undef GAN_MAT_ZERO_Q
01597 #undef GAN_MAT_ZERO_S
01598 #undef GAN_MAT_COPY_Q
01599 #undef GAN_MAT_COPY_S
01600 #undef GAN_MAT_SCALE_Q
01601 #undef GAN_MAT_SCALE_S
01602 #undef GAN_MAT_SCALE_I
01603 #undef GAN_MAT_DIVIDE_Q
01604 #undef GAN_MAT_DIVIDE_S
01605 #undef GAN_MAT_DIVIDE_I
01606 #undef GAN_MAT_NEGATE_Q
01607 #undef GAN_MAT_NEGATE_S
01608 #undef GAN_MAT_NEGATE_I
01609 #undef GAN_MAT_UNIT_Q
01610 #undef GAN_MAT_UNIT_S
01611 #undef GAN_MAT_UNIT_I
01612 #undef GAN_MAT_ADD_Q
01613 #undef GAN_MAT_ADD_I1
01614 #undef GAN_MAT_ADD_I2
01615 #undef GAN_MAT_INCREMENT
01616 #undef GAN_MAT_ADD_S
01617 #undef GAN_MAT_SUB_Q
01618 #undef GAN_MAT_SUB_I1
01619 #undef GAN_MAT_SUB_I2
01620 #undef GAN_MAT_DECREMENT
01621 #undef GAN_MAT_SUB_S
01622 #undef GAN_VEC_OUTER_Q
01623 #undef GAN_VEC_OUTER_S
01624 #undef GAN_MAT_MULTV_Q
01625 #undef GAN_MAT_MULTV_S
01626 #undef GAN_MAT_MULTV_I
01627 #undef GAN_MATT_MULTV_Q
01628 #undef GAN_MATT_MULTV_S
01629 #undef GAN_MATT_MULTV_I
01630 #undef GAN_MAT_LMULTM_Q
01631 #undef GAN_MAT_LMULTM_S
01632 #undef GAN_MAT_LMULTMT_Q
01633 #undef GAN_MAT_LMULTMT_S
01634 #undef GAN_MAT_RMULTM_Q
01635 #undef GAN_MAT_RMULTM_S
01636 #undef GAN_MAT_RMULTMT_Q
01637 #undef GAN_MAT_RMULTMT_S
01638 #undef GAN_MAT_LMULTMT_SYM_Q
01639 #undef GAN_MAT_LMULTMT_SYM_S
01640 #undef GAN_MAT_RMULTMT_SYM_Q
01641 #undef GAN_MAT_RMULTMT_SYM_S
01642 #undef GAN_MAT_LMULTS_Q
01643 #undef GAN_MAT_LMULTS_S
01644 #undef GAN_MAT_RMULTS_Q
01645 #undef GAN_MAT_RMULTS_S
01646 #undef GAN_SYMMATL_LRMULT_Q
01647 #undef GAN_SYMMATL_LRMULT_S
01648 #undef GAN_SYMMATR_LRMULT_Q
01649 #undef GAN_SYMMATR_LRMULT_S
01650 #undef GAN_MAT_LMULTL_Q
01651 #undef GAN_MAT_LMULTL_S
01652 #undef GAN_MAT_LMULTL_I
01653 #undef GAN_MAT_LMULTLI_Q
01654 #undef GAN_MAT_LMULTLI_S
01655 #undef GAN_MAT_LMULTLI_I
01656 #undef GAN_MAT_LMULTLT_Q
01657 #undef GAN_MAT_LMULTLT_S
01658 #undef GAN_MAT_LMULTLT_I
01659 #undef GAN_MAT_LMULTLIT_Q
01660 #undef GAN_MAT_LMULTLIT_S
01661 #undef GAN_MAT_LMULTLIT_I
01662 #undef GAN_MAT_RMULTL_Q
01663 #undef GAN_MAT_RMULTL_S
01664 #undef GAN_MAT_RMULTL_I
01665 #undef GAN_MAT_RMULTLI_Q
01666 #undef GAN_MAT_RMULTLI_S
01667 #undef GAN_MAT_RMULTLI_I
01668 #undef GAN_MAT_RMULTLT_Q
01669 #undef GAN_MAT_RMULTLT_S
01670 #undef GAN_MAT_RMULTLT_I
01671 #undef GAN_MAT_RMULTLIT_Q
01672 #undef GAN_MAT_RMULTLIT_S
01673 #undef GAN_MAT_RMULTLIT_I
01674 #undef GAN_MAT_SRMULTT_Q
01675 #undef GAN_MAT_SRMULTT_S
01676 #undef GAN_MAT_SRMULTT_I
01677 #undef GAN_MAT_SLMULTT_Q
01678 #undef GAN_MAT_SLMULTT_S
01679 #undef GAN_MAT_SLMULTT_I
01680 #undef GAN_MAT_RMULTLIT_S
01681 #undef GAN_MAT_SUMSQR_Q
01682 #undef GAN_MAT_SUMSQR_S
01683 #undef GAN_MAT_FNORM_Q
01684 #undef GAN_MAT_FNORM_S
01685 #undef GAN_MAT_FROM_MAT_Q
01686 #undef GAN_MAT_FROM_MAT_S
01687 #undef GAN_MAT_FROM_SQUMAT_Q
01688 #undef GAN_MAT_FROM_SQUMAT_S
01689 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01690 #undef GAN_SQUMAT_FROM_SQUMAT_S
01691 
01692 /* declare functions specific to symmetric 2x2 matrices */
01706 /* This library is free software; you can redistribute it and/or
01707    modify it under the terms of the GNU Lesser General Public
01708    License as published by the Free Software Foundation; either
01709    version 2.1 of the License, or (at your option) any later version.
01710 
01711    This library is distributed in the hope that it will be useful,
01712    but WITHOUT ANY WARRANTY; without even the implied warranty of
01713    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01714    Lesser General Public License for more details.
01715 
01716    You should have received a copy of the GNU Lesser General Public
01717    License along with this library; if not, write to the Free Software
01718    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01719 */
01720 
01721 #ifndef _GAN_2X2SYMMATF_H
01722 
01738 Gan_SquMatrix22_f *gan_symmat22f_fill_q ( Gan_SquMatrix22_f *A,
01739                                           float XX, float YX, float YY );
01740 
01746 #endif /* #ifndef _GAN_2X2SYMMATF_H */
01747 
01748 #define GAN_MATTYPE Gan_SquMatrix22_f
01749 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
01750 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
01751 #define GAN_VECTOR_TYPE Gan_Vector_f
01752 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
01753 #define GAN_REALTYPE float
01754 #define GAN_VECTYPE1 Gan_Vector2_f
01755 #define GAN_VECTYPE2 Gan_Vector2_f
01756 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX22_F
01757 #define GAN_MAT_FPRINT      gan_symmat22f_fprint
01758 #define GAN_MAT_PRINT       gan_symmat22f_print
01759 #define GAN_MAT_FSCANF      gan_symmat22f_fscanf
01760 #define GAN_MAT_FWRITE      gan_symmat22f_fwrite
01761 #define GAN_MAT_FREAD       gan_symmat22f_fread
01762 #define GAN_MAT_ZERO_Q      gan_symmat22f_zero_q
01763 #define GAN_MAT_ZERO_S      gan_symmat22f_zero_s
01764 #define GAN_MAT_COPY_Q      gan_symmat22f_copy_q
01765 #define GAN_MAT_COPY_S      gan_symmat22f_copy_s
01766 #define GAN_MAT_SCALE_Q     gan_symmat22f_scale_q
01767 #define GAN_MAT_SCALE_S     gan_symmat22f_scale_s
01768 #define GAN_MAT_SCALE_I     gan_symmat22f_scale_i
01769 #define GAN_MAT_DIVIDE_Q    gan_symmat22f_divide_q
01770 #define GAN_MAT_DIVIDE_S    gan_symmat22f_divide_s
01771 #define GAN_MAT_DIVIDE_I    gan_symmat22f_divide_i
01772 #define GAN_MAT_NEGATE_Q    gan_symmat22f_negate_q
01773 #define GAN_MAT_NEGATE_S    gan_symmat22f_negate_s
01774 #define GAN_MAT_NEGATE_I    gan_symmat22f_negate_i
01775 #define GAN_MAT_UNIT_Q      gan_symmat22f_unit_q
01776 #define GAN_MAT_UNIT_S      gan_symmat22f_unit_s
01777 #define GAN_MAT_UNIT_I      gan_symmat22f_unit_i
01778 #define GAN_MAT_ADD_Q       gan_symmat22f_add_q
01779 #define GAN_MAT_ADD_I1      gan_symmat22f_add_i1
01780 #define GAN_MAT_ADD_I2      gan_symmat22f_add_i2
01781 #define GAN_MAT_INCREMENT   gan_symmat22f_increment
01782 #define GAN_MAT_ADD_S       gan_symmat22f_add_s
01783 #define GAN_MAT_SUB_Q       gan_symmat22f_sub_q
01784 #define GAN_MAT_SUB_I1      gan_symmat22f_sub_i1
01785 #define GAN_MAT_SUB_I2      gan_symmat22f_sub_i2
01786 #define GAN_MAT_DECREMENT   gan_symmat22f_decrement
01787 #define GAN_MAT_SUB_S       gan_symmat22f_sub_s
01788 #define GAN_MAT_MULTV_Q     gan_symmat22f_multv2_q
01789 #define GAN_MAT_MULTV_S     gan_symmat22f_multv2_s
01790 #define GAN_MAT_SUMSQR_Q    gan_symmat22f_sumsqr_q
01791 #define GAN_MAT_SUMSQR_S    gan_symmat22f_sumsqr_s
01792 #define GAN_MAT_FNORM_Q     gan_symmat22f_Fnorm_q
01793 #define GAN_MAT_FNORM_S     gan_symmat22f_Fnorm_s
01794 
01795 #define GAN_SQUMAT_IDENT_Q       gan_symmat22f_ident_q
01796 #define GAN_SQUMAT_IDENT_S       gan_symmat22f_ident_s
01797 #define GAN_SQUMAT_INVERT        gan_symmat22f_invert
01798 #define GAN_SQUMAT_INVERT_Q      gan_symmat22f_invert_q
01799 #define GAN_SQUMAT_INVERT_S      gan_symmat22f_invert_s
01800 #define GAN_SQUMAT_INVERT_I      gan_symmat22f_invert_i
01801 #define GAN_SQUMAT_DET_Q         gan_symmat22f_det_q
01802 #define GAN_SQUMAT_DET_S         gan_symmat22f_det_s
01803 #define GAN_SQUMAT_TRACE_Q       gan_symmat22f_trace_q
01804 #define GAN_SQUMAT_TRACE_S       gan_symmat22f_trace_s
01805 
01806 #define GAN_VEC_OUTER_SYM_Q    gan_vec22f_outer_sym_q
01807 #define GAN_VEC_OUTER_SYM_S    gan_vec22f_outer_sym_s
01808 #define GAN_SYMMAT_CHOLESKY    gan_symmat22f_cholesky
01809 #define GAN_SYMMAT_CHOLESKY_Q  gan_symmat22f_cholesky_q
01810 #define GAN_SYMMAT_CHOLESKY_S  gan_symmat22f_cholesky_s
01811 #define GAN_SYMMAT_CHOLESKY_I  gan_symmat22f_cholesky_i
01812 
01813 #ifndef _GAN_2X2SYMMATF_H
01814 #define _GAN_2X2SYMMATF_H
01815 
01816 
01817 #endif /* #ifndef _GAN_2X2SYMMATF_H */
01818 
01831 /* This library is free software; you can redistribute it and/or
01832    modify it under the terms of the GNU Lesser General Public
01833    License as published by the Free Software Foundation; either
01834    version 2.1 of the License, or (at your option) any later version.
01835 
01836    This library is distributed in the hope that it will be useful,
01837    but WITHOUT ANY WARRANTY; without even the implied warranty of
01838    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01839    Lesser General Public License for more details.
01840 
01841    You should have received a copy of the GNU Lesser General Public
01842    License along with this library; if not, write to the Free Software
01843    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01844 */
01845 
01846 /* function declarations for functions common to all small symmetric matrix
01847  * types */
01848 
01849 
01850 
01851 /* documentation for macros defined in individual header files */
01852 
01863 Gan_SquMatrix22_f *gan_vec22f_outer_sym_q ( Gan_Vector2_f *p, Gan_SquMatrix22_f *A );
01864 
01886 Gan_SquMatrix22_f *gan_symmat22f_cholesky_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
01887 
01896 Gan_SquMatrix22_f *gan_symmat22f_cholesky_i ( Gan_SquMatrix22_f *A );
01897 
01903 #undef GAN_VEC_OUTER_SYM_Q
01904 #undef GAN_VEC_OUTER_SYM_S
01905 #undef GAN_SYMMAT_CHOLESKY
01906 #undef GAN_SYMMAT_CHOLESKY_Q
01907 #undef GAN_SYMMAT_CHOLESKY_S
01908 #undef GAN_SYMMAT_CHOLESKY_I
01909 
01922 /* This library is free software; you can redistribute it and/or
01923    modify it under the terms of the GNU Lesser General Public
01924    License as published by the Free Software Foundation; either
01925    version 2.1 of the License, or (at your option) any later version.
01926 
01927    This library is distributed in the hope that it will be useful,
01928    but WITHOUT ANY WARRANTY; without even the implied warranty of
01929    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01930    Lesser General Public License for more details.
01931 
01932    You should have received a copy of the GNU Lesser General Public
01933    License along with this library; if not, write to the Free Software
01934    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01935 */
01936 
01937 /* function declarations for functions common to all small square matrix
01938  * types */
01939 
01940 
01941 
01942 /* documentation for macros defined in individual header files */
01943 
01956 Gan_SquMatrix22_f *gan_symmat22f_ident_q ( Gan_SquMatrix22_f *A );
01957 
02008 Gan_SquMatrix22_f *gan_symmat22f_invert_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02009 
02018 Gan_SquMatrix22_f *gan_symmat22f_invert_i ( Gan_SquMatrix22_f *A );
02019 
02034 float gan_symmat22f_det_q ( Gan_SquMatrix22_f *A );
02035 
02041 float gan_symmat22f_trace_q ( Gan_SquMatrix22_f *A );
02042 
02048 #undef GAN_SQUMAT_IDENT_Q
02049 #undef GAN_SQUMAT_IDENT_S
02050 #undef GAN_SQUMAT_TPOSE_Q
02051 #undef GAN_SQUMAT_TPOSE_S
02052 #undef GAN_SQUMAT_TPOSE_I
02053 #undef GAN_MAT_SADDT_Q
02054 #undef GAN_MAT_SADDT_S
02055 #undef GAN_SQUMATI_MULTV_Q
02056 #undef GAN_SQUMATI_MULTV_S
02057 #undef GAN_SQUMATI_MULTV_I
02058 #undef GAN_SQUMATIT_MULTV_Q
02059 #undef GAN_SQUMATIT_MULTV_S
02060 #undef GAN_SQUMATIT_MULTV_I
02061 #undef GAN_SQUMAT_INVERT
02062 #undef GAN_SQUMAT_INVERT_Q
02063 #undef GAN_SQUMAT_INVERT_S
02064 #undef GAN_SQUMAT_INVERT_I
02065 #undef GAN_SQUMAT_ADJOINT_Q
02066 #undef GAN_SQUMAT_ADJOINT_S
02067 #undef GAN_SQUMAT_ADJOINTT_Q
02068 #undef GAN_SQUMAT_ADJOINTT_S
02069 #undef GAN_SQUMAT_DET_Q
02070 #undef GAN_SQUMAT_DET_S
02071 #undef GAN_SQUMAT_TRACE_Q
02072 #undef GAN_SQUMAT_TRACE_S
02073 
02086 /* This library is free software; you can redistribute it and/or
02087    modify it under the terms of the GNU Lesser General Public
02088    License as published by the Free Software Foundation; either
02089    version 2.1 of the License, or (at your option) any later version.
02090 
02091    This library is distributed in the hope that it will be useful,
02092    but WITHOUT ANY WARRANTY; without even the implied warranty of
02093    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02094    Lesser General Public License for more details.
02095 
02096    You should have received a copy of the GNU Lesser General Public
02097    License along with this library; if not, write to the Free Software
02098    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02099 */
02100 
02101 /* function declarations for functions common to all small vector types */
02102 
02103 
02104 
02105 /* documentation for macros defined in individual header files */
02106 
02117 Gan_SquMatrix22_f *gan_symmat22f_zero_q ( Gan_SquMatrix22_f *A );
02118 
02135 Gan_SquMatrix22_f *gan_symmat22f_copy_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02136 
02154 Gan_SquMatrix22_f *gan_symmat22f_scale_q ( Gan_SquMatrix22_f *A, float a,
02155                                Gan_SquMatrix22_f *B );
02156 
02164 Gan_SquMatrix22_f *gan_symmat22f_scale_i ( Gan_SquMatrix22_f *A, float a );
02165 
02174 Gan_SquMatrix22_f *gan_symmat22f_divide_q ( Gan_SquMatrix22_f *A, float a,
02175                                 Gan_SquMatrix22_f *B );
02176 
02184 Gan_SquMatrix22_f *gan_symmat22f_divide_i ( Gan_SquMatrix22_f *A, float a );
02185 
02193 Gan_SquMatrix22_f *gan_symmat22f_negate_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02194 
02202 Gan_SquMatrix22_f *gan_symmat22f_negate_i ( Gan_SquMatrix22_f *A );
02203 
02211 Gan_SquMatrix22_f *gan_symmat22f_unit_i ( Gan_SquMatrix22_f *A );
02212 
02230 Gan_SquMatrix22_f *gan_symmat22f_add_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
02231 
02240 Gan_SquMatrix22_f *gan_symmat22f_add_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02241 
02250 Gan_SquMatrix22_f *gan_symmat22f_add_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02251 
02260 Gan_SquMatrix22_f *gan_symmat22f_increment ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02261 
02279 Gan_SquMatrix22_f *gan_symmat22f_sub_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
02280 
02289 Gan_SquMatrix22_f *gan_symmat22f_sub_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02290 
02299 Gan_SquMatrix22_f *gan_symmat22f_sub_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02300 
02309 Gan_SquMatrix22_f *gan_symmat22f_decrement ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02310 
02329 Gan_Vector2_f *gan_symmat22f_multv2_q ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
02330                                 Gan_Vector2_f *q );
02331 
02332 
02333 
02334 
02406 float gan_symmat22f_sumsqr_q ( Gan_SquMatrix22_f *A );
02407 
02414 float gan_symmat22f_Fnorm_q ( Gan_SquMatrix22_f *A );
02415 
02446 /* This library is free software; you can redistribute it and/or
02447    modify it under the terms of the GNU Lesser General Public
02448    License as published by the Free Software Foundation; either
02449    version 2.1 of the License, or (at your option) any later version.
02450 
02451    This library is distributed in the hope that it will be useful,
02452    but WITHOUT ANY WARRANTY; without even the implied warranty of
02453    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02454    Lesser General Public License for more details.
02455 
02456    You should have received a copy of the GNU Lesser General Public
02457    License along with this library; if not, write to the Free Software
02458    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02459 */
02460 
02461 #undef GAN_MATTYPE
02462 #undef GAN_MATRIX_TYPE
02463 #undef GAN_SQUMATRIX_TYPE
02464 #undef GAN_VECTOR_TYPE
02465 #undef GAN_MAT_ELEMENT_TYPE
02466 #undef GAN_REALTYPE
02467 #undef GAN_VECTYPE1
02468 #undef GAN_VECTYPE2
02469 #undef GAN_MATTYPEL
02470 #undef GAN_MATTYPER
02471 #undef GAN_SQUMATTYPEL
02472 #undef GAN_SQUMATTYPER
02473 #undef GAN_FIXED_MATRIX_TYPE
02474 #undef GAN_MAT_FPRINT
02475 #undef GAN_MAT_PRINT
02476 #undef GAN_MAT_FSCANF
02477 #undef GAN_MAT_FWRITE
02478 #undef GAN_MAT_FREAD
02479 #undef GAN_MAT_ZERO_Q
02480 #undef GAN_MAT_ZERO_S
02481 #undef GAN_MAT_COPY_Q
02482 #undef GAN_MAT_COPY_S
02483 #undef GAN_MAT_SCALE_Q
02484 #undef GAN_MAT_SCALE_S
02485 #undef GAN_MAT_SCALE_I
02486 #undef GAN_MAT_DIVIDE_Q
02487 #undef GAN_MAT_DIVIDE_S
02488 #undef GAN_MAT_DIVIDE_I
02489 #undef GAN_MAT_NEGATE_Q
02490 #undef GAN_MAT_NEGATE_S
02491 #undef GAN_MAT_NEGATE_I
02492 #undef GAN_MAT_UNIT_Q
02493 #undef GAN_MAT_UNIT_S
02494 #undef GAN_MAT_UNIT_I
02495 #undef GAN_MAT_ADD_Q
02496 #undef GAN_MAT_ADD_I1
02497 #undef GAN_MAT_ADD_I2
02498 #undef GAN_MAT_INCREMENT
02499 #undef GAN_MAT_ADD_S
02500 #undef GAN_MAT_SUB_Q
02501 #undef GAN_MAT_SUB_I1
02502 #undef GAN_MAT_SUB_I2
02503 #undef GAN_MAT_DECREMENT
02504 #undef GAN_MAT_SUB_S
02505 #undef GAN_VEC_OUTER_Q
02506 #undef GAN_VEC_OUTER_S
02507 #undef GAN_MAT_MULTV_Q
02508 #undef GAN_MAT_MULTV_S
02509 #undef GAN_MAT_MULTV_I
02510 #undef GAN_MATT_MULTV_Q
02511 #undef GAN_MATT_MULTV_S
02512 #undef GAN_MATT_MULTV_I
02513 #undef GAN_MAT_LMULTM_Q
02514 #undef GAN_MAT_LMULTM_S
02515 #undef GAN_MAT_LMULTMT_Q
02516 #undef GAN_MAT_LMULTMT_S
02517 #undef GAN_MAT_RMULTM_Q
02518 #undef GAN_MAT_RMULTM_S
02519 #undef GAN_MAT_RMULTMT_Q
02520 #undef GAN_MAT_RMULTMT_S
02521 #undef GAN_MAT_LMULTMT_SYM_Q
02522 #undef GAN_MAT_LMULTMT_SYM_S
02523 #undef GAN_MAT_RMULTMT_SYM_Q
02524 #undef GAN_MAT_RMULTMT_SYM_S
02525 #undef GAN_MAT_LMULTS_Q
02526 #undef GAN_MAT_LMULTS_S
02527 #undef GAN_MAT_RMULTS_Q
02528 #undef GAN_MAT_RMULTS_S
02529 #undef GAN_SYMMATL_LRMULT_Q
02530 #undef GAN_SYMMATL_LRMULT_S
02531 #undef GAN_SYMMATR_LRMULT_Q
02532 #undef GAN_SYMMATR_LRMULT_S
02533 #undef GAN_MAT_LMULTL_Q
02534 #undef GAN_MAT_LMULTL_S
02535 #undef GAN_MAT_LMULTL_I
02536 #undef GAN_MAT_LMULTLI_Q
02537 #undef GAN_MAT_LMULTLI_S
02538 #undef GAN_MAT_LMULTLI_I
02539 #undef GAN_MAT_LMULTLT_Q
02540 #undef GAN_MAT_LMULTLT_S
02541 #undef GAN_MAT_LMULTLT_I
02542 #undef GAN_MAT_LMULTLIT_Q
02543 #undef GAN_MAT_LMULTLIT_S
02544 #undef GAN_MAT_LMULTLIT_I
02545 #undef GAN_MAT_RMULTL_Q
02546 #undef GAN_MAT_RMULTL_S
02547 #undef GAN_MAT_RMULTL_I
02548 #undef GAN_MAT_RMULTLI_Q
02549 #undef GAN_MAT_RMULTLI_S
02550 #undef GAN_MAT_RMULTLI_I
02551 #undef GAN_MAT_RMULTLT_Q
02552 #undef GAN_MAT_RMULTLT_S
02553 #undef GAN_MAT_RMULTLT_I
02554 #undef GAN_MAT_RMULTLIT_Q
02555 #undef GAN_MAT_RMULTLIT_S
02556 #undef GAN_MAT_RMULTLIT_I
02557 #undef GAN_MAT_SRMULTT_Q
02558 #undef GAN_MAT_SRMULTT_S
02559 #undef GAN_MAT_SRMULTT_I
02560 #undef GAN_MAT_SLMULTT_Q
02561 #undef GAN_MAT_SLMULTT_S
02562 #undef GAN_MAT_SLMULTT_I
02563 #undef GAN_MAT_RMULTLIT_S
02564 #undef GAN_MAT_SUMSQR_Q
02565 #undef GAN_MAT_SUMSQR_S
02566 #undef GAN_MAT_FNORM_Q
02567 #undef GAN_MAT_FNORM_S
02568 #undef GAN_MAT_FROM_MAT_Q
02569 #undef GAN_MAT_FROM_MAT_S
02570 #undef GAN_MAT_FROM_SQUMAT_Q
02571 #undef GAN_MAT_FROM_SQUMAT_S
02572 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02573 #undef GAN_SQUMAT_FROM_SQUMAT_S
02574 
02575 /* declare functions specific to lower triangular 2x2 matrices */
02589 /* This library is free software; you can redistribute it and/or
02590    modify it under the terms of the GNU Lesser General Public
02591    License as published by the Free Software Foundation; either
02592    version 2.1 of the License, or (at your option) any later version.
02593 
02594    This library is distributed in the hope that it will be useful,
02595    but WITHOUT ANY WARRANTY; without even the implied warranty of
02596    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02597    Lesser General Public License for more details.
02598 
02599    You should have received a copy of the GNU Lesser General Public
02600    License along with this library; if not, write to the Free Software
02601    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02602 */
02603 
02604 #ifndef _GAN_2X2LTMATF_H
02605 
02621 Gan_SquMatrix22_f *gan_ltmat22f_fill_q ( Gan_SquMatrix22_f *A,
02622                                          float XX, float YX, float YY );
02623 
02629 #endif /* #ifndef _GAN_2X2LTMATF_H */
02630 
02631 #define GAN_MATTYPE Gan_SquMatrix22_f
02632 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02633 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02634 #define GAN_VECTOR_TYPE Gan_Vector_f
02635 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02636 #define GAN_REALTYPE float
02637 #define GAN_VECTYPE1 Gan_Vector2_f
02638 #define GAN_VECTYPE2 Gan_Vector2_f
02639 #define GAN_SQUMATTYPEL Gan_SquMatrix22_f
02640 #define GAN_SQUMATTYPER Gan_SquMatrix22_f
02641 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX22_F
02642 #define GAN_MAT_FPRINT     gan_ltmat22f_fprint
02643 #define GAN_MAT_PRINT      gan_ltmat22f_print
02644 #define GAN_MAT_FSCANF     gan_ltmat22f_fscanf
02645 #define GAN_MAT_FWRITE     gan_ltmat22f_fwrite
02646 #define GAN_MAT_FREAD      gan_ltmat22f_fread
02647 #define GAN_MAT_ZERO_Q     gan_ltmat22f_zero_q
02648 #define GAN_MAT_ZERO_S     gan_ltmat22f_zero_s
02649 #define GAN_MAT_COPY_Q     gan_ltmat22f_copy_q
02650 #define GAN_MAT_COPY_S     gan_ltmat22f_copy_s
02651 #define GAN_MAT_SCALE_Q    gan_ltmat22f_scale_q
02652 #define GAN_MAT_SCALE_S    gan_ltmat22f_scale_s
02653 #define GAN_MAT_SCALE_I    gan_ltmat22f_scale_i
02654 #define GAN_MAT_DIVIDE_Q   gan_ltmat22f_divide_q
02655 #define GAN_MAT_DIVIDE_S   gan_ltmat22f_divide_s
02656 #define GAN_MAT_DIVIDE_I   gan_ltmat22f_divide_i
02657 #define GAN_MAT_NEGATE_Q   gan_ltmat22f_negate_q
02658 #define GAN_MAT_NEGATE_S   gan_ltmat22f_negate_s
02659 #define GAN_MAT_NEGATE_I   gan_ltmat22f_negate_i
02660 #define GAN_MAT_UNIT_Q     gan_ltmat22f_unit_q
02661 #define GAN_MAT_UNIT_S     gan_ltmat22f_unit_s
02662 #define GAN_MAT_UNIT_I     gan_ltmat22f_unit_i
02663 #define GAN_MAT_ADD_Q      gan_ltmat22f_add_q
02664 #define GAN_MAT_ADD_I1     gan_ltmat22f_add_i1
02665 #define GAN_MAT_ADD_I2     gan_ltmat22f_add_i2
02666 #define GAN_MAT_INCREMENT  gan_ltmat22f_increment
02667 #define GAN_MAT_ADD_S      gan_ltmat22f_add_s
02668 #define GAN_MAT_SUB_Q      gan_ltmat22f_sub_q
02669 #define GAN_MAT_SUB_I1     gan_ltmat22f_sub_i1
02670 #define GAN_MAT_SUB_I2     gan_ltmat22f_sub_i2
02671 #define GAN_MAT_DECREMENT  gan_ltmat22f_decrement
02672 #define GAN_MAT_SUB_S      gan_ltmat22f_sub_s
02673 #define GAN_MAT_MULTV_Q    gan_ltmat22f_multv2_q
02674 #define GAN_MAT_MULTV_S    gan_ltmat22f_multv2_s
02675 #define GAN_MAT_MULTV_I    gan_ltmat22f_multv2_i
02676 #define GAN_MATT_MULTV_Q   gan_ltmat22Tf_multv2_q
02677 #define GAN_MATT_MULTV_S   gan_ltmat22Tf_multv2_s
02678 #define GAN_MATT_MULTV_I   gan_ltmat22Tf_multv2_i
02679 #define GAN_MAT_SRMULTT_Q  gan_ltmat22f_srmultT_q
02680 #define GAN_MAT_SRMULTT_S  gan_ltmat22f_srmultT_s
02681 #define GAN_MAT_SRMULTT_I  gan_ltmat22f_srmultT_i
02682 #define GAN_MAT_SLMULTT_Q  gan_ltmat22f_slmultT_q
02683 #define GAN_MAT_SLMULTT_S  gan_ltmat22f_slmultT_s
02684 #define GAN_MAT_SLMULTT_I  gan_ltmat22f_slmultT_i
02685 #define GAN_MAT_SUMSQR_Q   gan_ltmat22f_sumsqr_q
02686 #define GAN_MAT_SUMSQR_S   gan_ltmat22f_sumsqr_s
02687 #define GAN_MAT_FNORM_Q    gan_ltmat22f_Fnorm_q
02688 #define GAN_MAT_FNORM_S    gan_ltmat22f_Fnorm_s
02689 
02690 #define GAN_SQUMAT_IDENT_Q    gan_ltmat22f_ident_q
02691 #define GAN_SQUMAT_IDENT_S    gan_ltmat22f_ident_s
02692 #define GAN_SQUMATI_MULTV_Q   gan_ltmat22If_multv2_q
02693 #define GAN_SQUMATI_MULTV_S   gan_ltmat22If_multv2_s
02694 #define GAN_SQUMATI_MULTV_I   gan_ltmat22If_multv2_i
02695 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat22ITf_multv2_q
02696 #define GAN_SQUMATIT_MULTV_S  gan_ltmat22ITf_multv2_s
02697 #define GAN_SQUMATIT_MULTV_I  gan_ltmat22ITf_multv2_i
02698 #define GAN_SQUMAT_INVERT     gan_ltmat22f_invert
02699 #define GAN_SQUMAT_INVERT_Q   gan_ltmat22f_invert_q
02700 #define GAN_SQUMAT_INVERT_S   gan_ltmat22f_invert_s
02701 #define GAN_SQUMAT_INVERT_I   gan_ltmat22f_invert_i
02702 #define GAN_SQUMAT_DET_Q      gan_ltmat22f_det_q
02703 #define GAN_SQUMAT_DET_S      gan_ltmat22f_det_s
02704 #define GAN_SQUMAT_TRACE_Q    gan_ltmat22f_trace_q
02705 #define GAN_SQUMAT_TRACE_S    gan_ltmat22f_trace_s
02706 
02707 #ifndef _GAN_2X2LTMATF_H
02708 #define _GAN_2X2LTMATF_H
02709 
02710 
02711 #endif /* #ifndef _GAN_2X2LTMATF_H */
02712 
02725 /* This library is free software; you can redistribute it and/or
02726    modify it under the terms of the GNU Lesser General Public
02727    License as published by the Free Software Foundation; either
02728    version 2.1 of the License, or (at your option) any later version.
02729 
02730    This library is distributed in the hope that it will be useful,
02731    but WITHOUT ANY WARRANTY; without even the implied warranty of
02732    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02733    Lesser General Public License for more details.
02734 
02735    You should have received a copy of the GNU Lesser General Public
02736    License along with this library; if not, write to the Free Software
02737    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02738 */
02739 
02740 /* function declarations for functions common to all small square matrix
02741  * types */
02742 
02743 
02744 
02745 /* documentation for macros defined in individual header files */
02746 
02759 Gan_SquMatrix22_f *gan_ltmat22f_ident_q ( Gan_SquMatrix22_f *A );
02760 
02798 Gan_Vector2_f *gan_ltmat22If_multv2_q ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
02799                                     Gan_Vector2_f *q );
02800 
02809 Gan_Vector2_f *gan_ltmat22If_multv2_i ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
02810 
02819 Gan_Vector2_f *gan_ltmat22ITf_multv2_q ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
02820                                      Gan_Vector2_f *q );
02821 
02830 Gan_Vector2_f *gan_ltmat22ITf_multv2_i ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
02831 
02849 Gan_SquMatrix22_f *gan_ltmat22f_invert_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02850 
02859 Gan_SquMatrix22_f *gan_ltmat22f_invert_i ( Gan_SquMatrix22_f *A );
02860 
02875 float gan_ltmat22f_det_q ( Gan_SquMatrix22_f *A );
02876 
02882 float gan_ltmat22f_trace_q ( Gan_SquMatrix22_f *A );
02883 
02889 #undef GAN_SQUMAT_IDENT_Q
02890 #undef GAN_SQUMAT_IDENT_S
02891 #undef GAN_SQUMAT_TPOSE_Q
02892 #undef GAN_SQUMAT_TPOSE_S
02893 #undef GAN_SQUMAT_TPOSE_I
02894 #undef GAN_MAT_SADDT_Q
02895 #undef GAN_MAT_SADDT_S
02896 #undef GAN_SQUMATI_MULTV_Q
02897 #undef GAN_SQUMATI_MULTV_S
02898 #undef GAN_SQUMATI_MULTV_I
02899 #undef GAN_SQUMATIT_MULTV_Q
02900 #undef GAN_SQUMATIT_MULTV_S
02901 #undef GAN_SQUMATIT_MULTV_I
02902 #undef GAN_SQUMAT_INVERT
02903 #undef GAN_SQUMAT_INVERT_Q
02904 #undef GAN_SQUMAT_INVERT_S
02905 #undef GAN_SQUMAT_INVERT_I
02906 #undef GAN_SQUMAT_ADJOINT_Q
02907 #undef GAN_SQUMAT_ADJOINT_S
02908 #undef GAN_SQUMAT_ADJOINTT_Q
02909 #undef GAN_SQUMAT_ADJOINTT_S
02910 #undef GAN_SQUMAT_DET_Q
02911 #undef GAN_SQUMAT_DET_S
02912 #undef GAN_SQUMAT_TRACE_Q
02913 #undef GAN_SQUMAT_TRACE_S
02914 
02927 /* This library is free software; you can redistribute it and/or
02928    modify it under the terms of the GNU Lesser General Public
02929    License as published by the Free Software Foundation; either
02930    version 2.1 of the License, or (at your option) any later version.
02931 
02932    This library is distributed in the hope that it will be useful,
02933    but WITHOUT ANY WARRANTY; without even the implied warranty of
02934    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02935    Lesser General Public License for more details.
02936 
02937    You should have received a copy of the GNU Lesser General Public
02938    License along with this library; if not, write to the Free Software
02939    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02940 */
02941 
02942 /* function declarations for functions common to all small vector types */
02943 
02944 
02945 
02946 /* documentation for macros defined in individual header files */
02947 
02958 Gan_SquMatrix22_f *gan_ltmat22f_zero_q ( Gan_SquMatrix22_f *A );
02959 
02976 Gan_SquMatrix22_f *gan_ltmat22f_copy_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02977 
02995 Gan_SquMatrix22_f *gan_ltmat22f_scale_q ( Gan_SquMatrix22_f *A, float a,
02996                                Gan_SquMatrix22_f *B );
02997 
03005 Gan_SquMatrix22_f *gan_ltmat22f_scale_i ( Gan_SquMatrix22_f *A, float a );
03006 
03015 Gan_SquMatrix22_f *gan_ltmat22f_divide_q ( Gan_SquMatrix22_f *A, float a,
03016                                 Gan_SquMatrix22_f *B );
03017 
03025 Gan_SquMatrix22_f *gan_ltmat22f_divide_i ( Gan_SquMatrix22_f *A, float a );
03026 
03034 Gan_SquMatrix22_f *gan_ltmat22f_negate_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03035 
03043 Gan_SquMatrix22_f *gan_ltmat22f_negate_i ( Gan_SquMatrix22_f *A );
03044 
03052 Gan_SquMatrix22_f *gan_ltmat22f_unit_i ( Gan_SquMatrix22_f *A );
03053 
03071 Gan_SquMatrix22_f *gan_ltmat22f_add_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
03072 
03081 Gan_SquMatrix22_f *gan_ltmat22f_add_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03082 
03091 Gan_SquMatrix22_f *gan_ltmat22f_add_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03092 
03101 Gan_SquMatrix22_f *gan_ltmat22f_increment ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03102 
03120 Gan_SquMatrix22_f *gan_ltmat22f_sub_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
03121 
03130 Gan_SquMatrix22_f *gan_ltmat22f_sub_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03131 
03140 Gan_SquMatrix22_f *gan_ltmat22f_sub_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03141 
03150 Gan_SquMatrix22_f *gan_ltmat22f_decrement ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03151 
03170 Gan_Vector2_f *gan_ltmat22f_multv2_q ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
03171                                 Gan_Vector2_f *q );
03172 
03181 Gan_Vector2_f *gan_ltmat22f_multv2_i ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
03182 
03191 Gan_Vector2_f *gan_ltmat22Tf_multv2_q ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
03192                                  Gan_Vector2_f *q );
03193 
03202 Gan_Vector2_f *gan_ltmat22Tf_multv2_i ( Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
03203 
03265 Gan_SquMatrix22_f *gan_ltmat22f_slmultT_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03266 
03276 Gan_SquMatrix22_f *gan_ltmat22f_slmultT_i ( Gan_SquMatrix22_f *A );
03277 
03286 Gan_SquMatrix22_f *gan_ltmat22f_srmultT_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03287 
03297 Gan_SquMatrix22_f *gan_ltmat22f_srmultT_i ( Gan_SquMatrix22_f *A );
03298 
03313 float gan_ltmat22f_sumsqr_q ( Gan_SquMatrix22_f *A );
03314 
03321 float gan_ltmat22f_Fnorm_q ( Gan_SquMatrix22_f *A );
03322 
03353 /* This library is free software; you can redistribute it and/or
03354    modify it under the terms of the GNU Lesser General Public
03355    License as published by the Free Software Foundation; either
03356    version 2.1 of the License, or (at your option) any later version.
03357 
03358    This library is distributed in the hope that it will be useful,
03359    but WITHOUT ANY WARRANTY; without even the implied warranty of
03360    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03361    Lesser General Public License for more details.
03362 
03363    You should have received a copy of the GNU Lesser General Public
03364    License along with this library; if not, write to the Free Software
03365    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03366 */
03367 
03368 #undef GAN_MATTYPE
03369 #undef GAN_MATRIX_TYPE
03370 #undef GAN_SQUMATRIX_TYPE
03371 #undef GAN_VECTOR_TYPE
03372 #undef GAN_MAT_ELEMENT_TYPE
03373 #undef GAN_REALTYPE
03374 #undef GAN_VECTYPE1
03375 #undef GAN_VECTYPE2
03376 #undef GAN_MATTYPEL
03377 #undef GAN_MATTYPER
03378 #undef GAN_SQUMATTYPEL
03379 #undef GAN_SQUMATTYPER
03380 #undef GAN_FIXED_MATRIX_TYPE
03381 #undef GAN_MAT_FPRINT
03382 #undef GAN_MAT_PRINT
03383 #undef GAN_MAT_FSCANF
03384 #undef GAN_MAT_FWRITE
03385 #undef GAN_MAT_FREAD
03386 #undef GAN_MAT_ZERO_Q
03387 #undef GAN_MAT_ZERO_S
03388 #undef GAN_MAT_COPY_Q
03389 #undef GAN_MAT_COPY_S
03390 #undef GAN_MAT_SCALE_Q
03391 #undef GAN_MAT_SCALE_S
03392 #undef GAN_MAT_SCALE_I
03393 #undef GAN_MAT_DIVIDE_Q
03394 #undef GAN_MAT_DIVIDE_S
03395 #undef GAN_MAT_DIVIDE_I
03396 #undef GAN_MAT_NEGATE_Q
03397 #undef GAN_MAT_NEGATE_S
03398 #undef GAN_MAT_NEGATE_I
03399 #undef GAN_MAT_UNIT_Q
03400 #undef GAN_MAT_UNIT_S
03401 #undef GAN_MAT_UNIT_I
03402 #undef GAN_MAT_ADD_Q
03403 #undef GAN_MAT_ADD_I1
03404 #undef GAN_MAT_ADD_I2
03405 #undef GAN_MAT_INCREMENT
03406 #undef GAN_MAT_ADD_S
03407 #undef GAN_MAT_SUB_Q
03408 #undef GAN_MAT_SUB_I1
03409 #undef GAN_MAT_SUB_I2
03410 #undef GAN_MAT_DECREMENT
03411 #undef GAN_MAT_SUB_S
03412 #undef GAN_VEC_OUTER_Q
03413 #undef GAN_VEC_OUTER_S
03414 #undef GAN_MAT_MULTV_Q
03415 #undef GAN_MAT_MULTV_S
03416 #undef GAN_MAT_MULTV_I
03417 #undef GAN_MATT_MULTV_Q
03418 #undef GAN_MATT_MULTV_S
03419 #undef GAN_MATT_MULTV_I
03420 #undef GAN_MAT_LMULTM_Q
03421 #undef GAN_MAT_LMULTM_S
03422 #undef GAN_MAT_LMULTMT_Q
03423 #undef GAN_MAT_LMULTMT_S
03424 #undef GAN_MAT_RMULTM_Q
03425 #undef GAN_MAT_RMULTM_S
03426 #undef GAN_MAT_RMULTMT_Q
03427 #undef GAN_MAT_RMULTMT_S
03428 #undef GAN_MAT_LMULTMT_SYM_Q
03429 #undef GAN_MAT_LMULTMT_SYM_S
03430 #undef GAN_MAT_RMULTMT_SYM_Q
03431 #undef GAN_MAT_RMULTMT_SYM_S
03432 #undef GAN_MAT_LMULTS_Q
03433 #undef GAN_MAT_LMULTS_S
03434 #undef GAN_MAT_RMULTS_Q
03435 #undef GAN_MAT_RMULTS_S
03436 #undef GAN_SYMMATL_LRMULT_Q
03437 #undef GAN_SYMMATL_LRMULT_S
03438 #undef GAN_SYMMATR_LRMULT_Q
03439 #undef GAN_SYMMATR_LRMULT_S
03440 #undef GAN_MAT_LMULTL_Q
03441 #undef GAN_MAT_LMULTL_S
03442 #undef GAN_MAT_LMULTL_I
03443 #undef GAN_MAT_LMULTLI_Q
03444 #undef GAN_MAT_LMULTLI_S
03445 #undef GAN_MAT_LMULTLI_I
03446 #undef GAN_MAT_LMULTLT_Q
03447 #undef GAN_MAT_LMULTLT_S
03448 #undef GAN_MAT_LMULTLT_I
03449 #undef GAN_MAT_LMULTLIT_Q
03450 #undef GAN_MAT_LMULTLIT_S
03451 #undef GAN_MAT_LMULTLIT_I
03452 #undef GAN_MAT_RMULTL_Q
03453 #undef GAN_MAT_RMULTL_S
03454 #undef GAN_MAT_RMULTL_I
03455 #undef GAN_MAT_RMULTLI_Q
03456 #undef GAN_MAT_RMULTLI_S
03457 #undef GAN_MAT_RMULTLI_I
03458 #undef GAN_MAT_RMULTLT_Q
03459 #undef GAN_MAT_RMULTLT_S
03460 #undef GAN_MAT_RMULTLT_I
03461 #undef GAN_MAT_RMULTLIT_Q
03462 #undef GAN_MAT_RMULTLIT_S
03463 #undef GAN_MAT_RMULTLIT_I
03464 #undef GAN_MAT_SRMULTT_Q
03465 #undef GAN_MAT_SRMULTT_S
03466 #undef GAN_MAT_SRMULTT_I
03467 #undef GAN_MAT_SLMULTT_Q
03468 #undef GAN_MAT_SLMULTT_S
03469 #undef GAN_MAT_SLMULTT_I
03470 #undef GAN_MAT_RMULTLIT_S
03471 #undef GAN_MAT_SUMSQR_Q
03472 #undef GAN_MAT_SUMSQR_S
03473 #undef GAN_MAT_FNORM_Q
03474 #undef GAN_MAT_FNORM_S
03475 #undef GAN_MAT_FROM_MAT_Q
03476 #undef GAN_MAT_FROM_MAT_S
03477 #undef GAN_MAT_FROM_SQUMAT_Q
03478 #undef GAN_MAT_FROM_SQUMAT_S
03479 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03480 #undef GAN_SQUMAT_FROM_SQUMAT_S
03481 
03482 /* declare functions specific to upper triangular 2x2 matrices */
03496 #define GAN_MATTYPE Gan_SquMatrix22_f
03497 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03498 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03499 #define GAN_VECTOR_TYPE Gan_Vector_f
03500 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03501 #define GAN_REALTYPE float
03502 #define GAN_MAT_FPRINT   gan_ltmat22Tf_fprint
03503 #define GAN_MAT_PRINT    gan_ltmat22Tf_print
03504 #define GAN_MAT_FSCANF   gan_ltmat22Tf_fscanf
03505 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX22_F
03506 
03507 #define gan_ltmat22Tf_fwrite gan_ltmat22f_fwrite
03508 #define gan_ltmat22Tf_fread  gan_ltmat22f_fread
03509 
03522 /* This library is free software; you can redistribute it and/or
03523    modify it under the terms of the GNU Lesser General Public
03524    License as published by the Free Software Foundation; either
03525    version 2.1 of the License, or (at your option) any later version.
03526 
03527    This library is distributed in the hope that it will be useful,
03528    but WITHOUT ANY WARRANTY; without even the implied warranty of
03529    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03530    Lesser General Public License for more details.
03531 
03532    You should have received a copy of the GNU Lesser General Public
03533    License along with this library; if not, write to the Free Software
03534    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03535 */
03536 
03537 /* function declarations for functions common to all small square matrix
03538  * types */
03539 
03540 
03541 
03542 /* documentation for macros defined in individual header files */
03543 
03610 #undef GAN_SQUMAT_IDENT_Q
03611 #undef GAN_SQUMAT_IDENT_S
03612 #undef GAN_SQUMAT_TPOSE_Q
03613 #undef GAN_SQUMAT_TPOSE_S
03614 #undef GAN_SQUMAT_TPOSE_I
03615 #undef GAN_MAT_SADDT_Q
03616 #undef GAN_MAT_SADDT_S
03617 #undef GAN_SQUMATI_MULTV_Q
03618 #undef GAN_SQUMATI_MULTV_S
03619 #undef GAN_SQUMATI_MULTV_I
03620 #undef GAN_SQUMATIT_MULTV_Q
03621 #undef GAN_SQUMATIT_MULTV_S
03622 #undef GAN_SQUMATIT_MULTV_I
03623 #undef GAN_SQUMAT_INVERT
03624 #undef GAN_SQUMAT_INVERT_Q
03625 #undef GAN_SQUMAT_INVERT_S
03626 #undef GAN_SQUMAT_INVERT_I
03627 #undef GAN_SQUMAT_ADJOINT_Q
03628 #undef GAN_SQUMAT_ADJOINT_S
03629 #undef GAN_SQUMAT_ADJOINTT_Q
03630 #undef GAN_SQUMAT_ADJOINTT_S
03631 #undef GAN_SQUMAT_DET_Q
03632 #undef GAN_SQUMAT_DET_S
03633 #undef GAN_SQUMAT_TRACE_Q
03634 #undef GAN_SQUMAT_TRACE_S
03635 
03648 /* This library is free software; you can redistribute it and/or
03649    modify it under the terms of the GNU Lesser General Public
03650    License as published by the Free Software Foundation; either
03651    version 2.1 of the License, or (at your option) any later version.
03652 
03653    This library is distributed in the hope that it will be useful,
03654    but WITHOUT ANY WARRANTY; without even the implied warranty of
03655    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03656    Lesser General Public License for more details.
03657 
03658    You should have received a copy of the GNU Lesser General Public
03659    License along with this library; if not, write to the Free Software
03660    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03661 */
03662 
03663 /* function declarations for functions common to all small vector types */
03664 
03665 
03666 
03667 /* documentation for macros defined in individual header files */
03668 
03839 /* This library is free software; you can redistribute it and/or
03840    modify it under the terms of the GNU Lesser General Public
03841    License as published by the Free Software Foundation; either
03842    version 2.1 of the License, or (at your option) any later version.
03843 
03844    This library is distributed in the hope that it will be useful,
03845    but WITHOUT ANY WARRANTY; without even the implied warranty of
03846    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03847    Lesser General Public License for more details.
03848 
03849    You should have received a copy of the GNU Lesser General Public
03850    License along with this library; if not, write to the Free Software
03851    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03852 */
03853 
03854 #undef GAN_MATTYPE
03855 #undef GAN_MATRIX_TYPE
03856 #undef GAN_SQUMATRIX_TYPE
03857 #undef GAN_VECTOR_TYPE
03858 #undef GAN_MAT_ELEMENT_TYPE
03859 #undef GAN_REALTYPE
03860 #undef GAN_VECTYPE1
03861 #undef GAN_VECTYPE2
03862 #undef GAN_MATTYPEL
03863 #undef GAN_MATTYPER
03864 #undef GAN_SQUMATTYPEL
03865 #undef GAN_SQUMATTYPER
03866 #undef GAN_FIXED_MATRIX_TYPE
03867 #undef GAN_MAT_FPRINT
03868 #undef GAN_MAT_PRINT
03869 #undef GAN_MAT_FSCANF
03870 #undef GAN_MAT_FWRITE
03871 #undef GAN_MAT_FREAD
03872 #undef GAN_MAT_ZERO_Q
03873 #undef GAN_MAT_ZERO_S
03874 #undef GAN_MAT_COPY_Q
03875 #undef GAN_MAT_COPY_S
03876 #undef GAN_MAT_SCALE_Q
03877 #undef GAN_MAT_SCALE_S
03878 #undef GAN_MAT_SCALE_I
03879 #undef GAN_MAT_DIVIDE_Q
03880 #undef GAN_MAT_DIVIDE_S
03881 #undef GAN_MAT_DIVIDE_I
03882 #undef GAN_MAT_NEGATE_Q
03883 #undef GAN_MAT_NEGATE_S
03884 #undef GAN_MAT_NEGATE_I
03885 #undef GAN_MAT_UNIT_Q
03886 #undef GAN_MAT_UNIT_S
03887 #undef GAN_MAT_UNIT_I
03888 #undef GAN_MAT_ADD_Q
03889 #undef GAN_MAT_ADD_I1
03890 #undef GAN_MAT_ADD_I2
03891 #undef GAN_MAT_INCREMENT
03892 #undef GAN_MAT_ADD_S
03893 #undef GAN_MAT_SUB_Q
03894 #undef GAN_MAT_SUB_I1
03895 #undef GAN_MAT_SUB_I2
03896 #undef GAN_MAT_DECREMENT
03897 #undef GAN_MAT_SUB_S
03898 #undef GAN_VEC_OUTER_Q
03899 #undef GAN_VEC_OUTER_S
03900 #undef GAN_MAT_MULTV_Q
03901 #undef GAN_MAT_MULTV_S
03902 #undef GAN_MAT_MULTV_I
03903 #undef GAN_MATT_MULTV_Q
03904 #undef GAN_MATT_MULTV_S
03905 #undef GAN_MATT_MULTV_I
03906 #undef GAN_MAT_LMULTM_Q
03907 #undef GAN_MAT_LMULTM_S
03908 #undef GAN_MAT_LMULTMT_Q
03909 #undef GAN_MAT_LMULTMT_S
03910 #undef GAN_MAT_RMULTM_Q
03911 #undef GAN_MAT_RMULTM_S
03912 #undef GAN_MAT_RMULTMT_Q
03913 #undef GAN_MAT_RMULTMT_S
03914 #undef GAN_MAT_LMULTMT_SYM_Q
03915 #undef GAN_MAT_LMULTMT_SYM_S
03916 #undef GAN_MAT_RMULTMT_SYM_Q
03917 #undef GAN_MAT_RMULTMT_SYM_S
03918 #undef GAN_MAT_LMULTS_Q
03919 #undef GAN_MAT_LMULTS_S
03920 #undef GAN_MAT_RMULTS_Q
03921 #undef GAN_MAT_RMULTS_S
03922 #undef GAN_SYMMATL_LRMULT_Q
03923 #undef GAN_SYMMATL_LRMULT_S
03924 #undef GAN_SYMMATR_LRMULT_Q
03925 #undef GAN_SYMMATR_LRMULT_S
03926 #undef GAN_MAT_LMULTL_Q
03927 #undef GAN_MAT_LMULTL_S
03928 #undef GAN_MAT_LMULTL_I
03929 #undef GAN_MAT_LMULTLI_Q
03930 #undef GAN_MAT_LMULTLI_S
03931 #undef GAN_MAT_LMULTLI_I
03932 #undef GAN_MAT_LMULTLT_Q
03933 #undef GAN_MAT_LMULTLT_S
03934 #undef GAN_MAT_LMULTLT_I
03935 #undef GAN_MAT_LMULTLIT_Q
03936 #undef GAN_MAT_LMULTLIT_S
03937 #undef GAN_MAT_LMULTLIT_I
03938 #undef GAN_MAT_RMULTL_Q
03939 #undef GAN_MAT_RMULTL_S
03940 #undef GAN_MAT_RMULTL_I
03941 #undef GAN_MAT_RMULTLI_Q
03942 #undef GAN_MAT_RMULTLI_S
03943 #undef GAN_MAT_RMULTLI_I
03944 #undef GAN_MAT_RMULTLT_Q
03945 #undef GAN_MAT_RMULTLT_S
03946 #undef GAN_MAT_RMULTLT_I
03947 #undef GAN_MAT_RMULTLIT_Q
03948 #undef GAN_MAT_RMULTLIT_S
03949 #undef GAN_MAT_RMULTLIT_I
03950 #undef GAN_MAT_SRMULTT_Q
03951 #undef GAN_MAT_SRMULTT_S
03952 #undef GAN_MAT_SRMULTT_I
03953 #undef GAN_MAT_SLMULTT_Q
03954 #undef GAN_MAT_SLMULTT_S
03955 #undef GAN_MAT_SLMULTT_I
03956 #undef GAN_MAT_RMULTLIT_S
03957 #undef GAN_MAT_SUMSQR_Q
03958 #undef GAN_MAT_SUMSQR_S
03959 #undef GAN_MAT_FNORM_Q
03960 #undef GAN_MAT_FNORM_S
03961 #undef GAN_MAT_FROM_MAT_Q
03962 #undef GAN_MAT_FROM_MAT_S
03963 #undef GAN_MAT_FROM_SQUMAT_Q
03964 #undef GAN_MAT_FROM_SQUMAT_S
03965 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03966 #undef GAN_SQUMAT_FROM_SQUMAT_S
03967 
03976 #ifdef __cplusplus
03977 }
03978 #endif
03979 
03980 #endif /* #ifndef _GAN_2X2MATRIXF_H */

Generated on Mon Oct 13 16:14:30 2003 by doxygen1.3-rc1