Main Page | Modules | Class List | File List | Class 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 
00361 
00362 typedef struct Gan_Matrix22_f
00363 {
00364    float xx, xy,
00365          yx, yy;
00366 } Gan_Matrix22_f;
00367 
00368 #ifndef NDEBUG
00369 
00370 typedef enum { GAN_SYMMETRIC_MATRIX22_F, GAN_LOWER_TRI_MATRIX22_F }
00371  Gan_SquMatrix22Type_f;
00372 #endif /* #ifndef NDEBUG */
00373 
00375 typedef struct Gan_SquMatrix22_f
00376 {
00377 #ifndef NDEBUG
00378    /* square matrix type, for setting and checking in debug mode */
00379    Gan_SquMatrix22Type_f type;
00380 #endif /* #ifndef NDEBUG */
00381 
00382    /* matrix data */
00383    float xx,
00384          yx, yy;
00385 } Gan_SquMatrix22_f;
00386 
00387 /* matrix definitions specific to 2x2 matrices */
00388 #define GAN_ST22F_FILL(A,t,XX,YX,YY)\
00389            (GAN_TEST_OP1(A,Gan_SquMatrix22_f),gan_eval((A)->type=t),\
00390             GAN_FREP22L_A_C((A)->,=,(XX),(YX),(YY)))
00391 #define GAN_ST22F_IDENT(A,t)\
00392            (GAN_TEST_OP1(A,Gan_SquMatrix22_f),gan_eval((A)->type=t),\
00393             GAN_FREP22L_A_C((A)->,=,1.0,0.0,1.0))
00394 
00395 /* generic matrix multiply operations */
00396 #define GAN_MAT22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00397  (a p1 = GAN_REP2_OP_AB(b,* c,xx,xy,q1,q2,+),\
00398   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+))
00399 #define GAN_MAT22TF_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,xy,yy,q1,q2,+))
00402 
00403 /* symmetric matrix multiply operation */
00404 #define GAN_SYM22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00405  (a p1 = GAN_REP2_OP_AB(b,* c,xx,yx,q1,q2,+),\
00406   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+))
00407 
00408 /* lower triangular matrix multiply operations */
00409 #define GAN_LOW22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00410  (a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00411   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00412 #define GAN_LOW22IF_MULT1D(a,b,c,p1,p2,q1,q2)\
00413  (a p1 =  c q1 / b xx,\
00414   a p2 = (c q2 - b yx * a p1) / b yy)
00415 
00416 /* upper triangular matrix multiply operations */
00417 #define GAN_UPP22F_MULT1D(a,b,c,p1,p2,q1,q2)\
00418  (a p1 = GAN_REP2_OP_AB(b,* c,xx,yx,q1,q2,+),\
00419   a p2 = GAN_REP1_OP_AB(b,* c,yy,q2,+))
00420 #define GAN_UPP22IF_MULT1D(a,b,c,p1,p2,q1,q2)\
00421  (a p2 =  c q2 / b yy,\
00422   a p1 = (c q1 - b yx * a p2) / b xx)
00423 
00424 /* symmetric/lower triangular square matrix definitions */
00425 #define GAN_ST22F_ZERO(A,t)\
00426            (GAN_TEST_OP1(A,Gan_SquMatrix22_f), gan_eval((A)->type=t),\
00427             GAN_REP22L_AS_C((A)->,=0.0))
00428 #define GAN_ST22F_COPY(A,B,t)\
00429            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00430             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00431             GAN_REP22L_AA_C((B)->,=(A)->))
00432 #define GAN_ST22F_SCALE(A,a,B,t)\
00433            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00434             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00435             GAN_REP22L_AAS_C((B)->,=(A)->,*(a)))
00436 #define GAN_ST22F_DIVIDE(A,a,B,t)\
00437            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00438             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00439             GAN_REP22L_AAS_C((B)->,=(A)->,/(a)))
00440 #define GAN_ST22F_NEGATE(A,B,t)\
00441            (GAN_TEST_OP2(A,B,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00442             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00443             GAN_REP22L_AA_C((B)->,=-(A)->))
00444 #define GAN_ST22F_ADD(A,B,C,t)\
00445          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix22_f,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00446           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00447           GAN_REP22L_AAA_C((C)->,=(A)->,+(B)->))
00448 #define GAN_ST22F_SUB(A,B,C,t)\
00449          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix22_f,Gan_SquMatrix22_f,Gan_SquMatrix22_f),\
00450           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00451           GAN_REP22L_AAA_C((C)->,=(A)->,-(B)->))
00452 
00453 /* declare functions specific to generic 2x2 matrices */
00467 /* This library is free software; you can redistribute it and/or
00468    modify it under the terms of the GNU Lesser General Public
00469    License as published by the Free Software Foundation; either
00470    version 2.1 of the License, or (at your option) any later version.
00471 
00472    This library is distributed in the hope that it will be useful,
00473    but WITHOUT ANY WARRANTY; without even the implied warranty of
00474    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00475    Lesser General Public License for more details.
00476 
00477    You should have received a copy of the GNU Lesser General Public
00478    License along with this library; if not, write to the Free Software
00479    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00480 */
00481 
00482 #ifndef _GAN_2X2MATF_H
00483 
00498  Gan_Matrix22_f *gan_mat22f_fill_q ( Gan_Matrix22_f *A,
00499                                     float XX, float XY, float YX, float YY );
00500 
00521  void gan_mat22f_get_rows_q ( const Gan_Matrix22_f *A,
00522                              Gan_Vector2_f *p, Gan_Vector2_f *q );
00523 
00535  void gan_mat22f_get_cols_q ( const Gan_Matrix22_f *A,
00536                              Gan_Vector2_f *p, Gan_Vector2_f *q );
00537 
00543 #endif /* #ifndef _GAN_2X2MATF_H */
00544 
00545 #define GAN_MATTYPE Gan_Matrix22_f
00546 #define GAN_MATRIX_TYPE Gan_Matrix_f
00547 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00548 #define GAN_VECTOR_TYPE Gan_Vector_f
00549 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00550 #define GAN_REALTYPE float
00551 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
00552 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
00553 #define GAN_VECTYPE1 Gan_Vector2_f
00554 #define GAN_VECTYPE2 Gan_Vector2_f
00555 #define GAN_MATTYPEL Gan_Matrix22_f
00556 #define GAN_MATTYPER Gan_Matrix22_f
00557 #define GAN_SQUMATTYPEL Gan_SquMatrix22_f
00558 #define GAN_SQUMATTYPER Gan_SquMatrix22_f
00559 #define GAN_MAT_FPRINT                     gan_mat22f_fprint
00560 #define GAN_MAT_PRINT                      gan_mat22f_print
00561 #define GAN_MAT_FSCANF                     gan_mat22f_fscanf
00562 #define GAN_MAT_FWRITE                     gan_mat22f_fwrite
00563 #define GAN_MAT_FREAD                      gan_mat22f_fread
00564 #define GAN_MAT_ZERO_Q                     gan_mat22f_zero_q
00565 #define GAN_MAT_ZERO_S                     gan_mat22f_zero_s
00566 #define GAN_MAT_COPY_Q                     gan_mat22f_copy_q
00567 #define GAN_MAT_COPY_S                     gan_mat22f_copy_s
00568 #define GAN_MAT_SCALE_Q                    gan_mat22f_scale_q
00569 #define GAN_MAT_SCALE_I                    gan_mat22f_scale_i
00570 #define GAN_MAT_SCALE_S                    gan_mat22f_scale_s
00571 #define GAN_MAT_DIVIDE_Q                   gan_mat22f_divide_q
00572 #define GAN_MAT_DIVIDE_I                   gan_mat22f_divide_i
00573 #define GAN_MAT_DIVIDE_S                   gan_mat22f_divide_s
00574 #define GAN_MAT_NEGATE_Q                   gan_mat22f_negate_q
00575 #define GAN_MAT_NEGATE_I                   gan_mat22f_negate_i
00576 #define GAN_MAT_NEGATE_S                   gan_mat22f_negate_s
00577 #define GAN_MAT_UNIT_Q                     gan_mat22f_unit_q
00578 #define GAN_MAT_UNIT_I                     gan_mat22f_unit_i
00579 #define GAN_MAT_UNIT_S                     gan_mat22f_unit_s
00580 #define GAN_MAT_ADD_Q                      gan_mat22f_add_q
00581 #define GAN_MAT_ADD_I1                     gan_mat22f_add_i1
00582 #define GAN_MAT_ADD_I2                     gan_mat22f_add_i2
00583 #define GAN_MAT_INCREMENT                  gan_mat22f_increment
00584 #define GAN_MAT_ADD_S                      gan_mat22f_add_s
00585 #define GAN_MAT_SUB_Q                      gan_mat22f_sub_q
00586 #define GAN_MAT_SUB_I1                     gan_mat22f_sub_i1
00587 #define GAN_MAT_SUB_I2                     gan_mat22f_sub_i2
00588 #define GAN_MAT_DECREMENT                  gan_mat22f_decrement
00589 #define GAN_MAT_SUB_S                      gan_mat22f_sub_s
00590 #define GAN_VEC_OUTER_Q                    gan_vec22f_outer_q
00591 #define GAN_VEC_OUTER_S                    gan_vec22f_outer_s
00592 #define GAN_MAT_MULTV_Q                    gan_mat22f_multv2_q
00593 #define GAN_MAT_MULTV_S                    gan_mat22f_multv2_s
00594 #define GAN_MATT_MULTV_Q                   gan_mat22Tf_multv2_q
00595 #define GAN_MATT_MULTV_S                   gan_mat22Tf_multv2_s
00596 #define GAN_MAT_LMULTMT_Q                  gan_mat22f_lmultm22T_q
00597 #define GAN_MAT_LMULTMT_S                  gan_mat22f_lmultm22T_s
00598 #define GAN_MAT_RMULTM_Q                   gan_mat22f_rmultm22_q
00599 #define GAN_MAT_RMULTM_S                   gan_mat22f_rmultm22_s
00600 #define GAN_MAT_RMULTMT_Q                  gan_mat22f_rmultm22T_q
00601 #define GAN_MAT_RMULTMT_S                  gan_mat22f_rmultm22T_s
00602 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat22f_lmultm22T_sym_q
00603 #define GAN_MAT_LMULTMT_SYM_S              gan_mat22f_lmultm22T_sym_s
00604 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat22f_rmultm22T_sym_q
00605 #define GAN_MAT_RMULTMT_SYM_S              gan_mat22f_rmultm22T_sym_s
00606 #define GAN_MAT_SLMULTT_Q                  gan_mat22f_slmultT_q
00607 #define GAN_MAT_SLMULTT_S                  gan_mat22f_slmultT_s
00608 #define GAN_MAT_SRMULTT_Q                  gan_mat22f_srmultT_q
00609 #define GAN_MAT_SRMULTT_S                  gan_mat22f_srmultT_s
00610 #define GAN_MAT_LMULTS_Q                   gan_mat22f_lmults22_q
00611 #define GAN_MAT_LMULTS_S                   gan_mat22f_lmults22_s
00612 #define GAN_MAT_RMULTS_Q                   gan_mat22f_rmults22_q
00613 #define GAN_MAT_RMULTS_S                   gan_mat22f_rmults22_s
00614 #define GAN_SYMMATL_LRMULT_Q               gan_symmat22f_lrmultm22T_q
00615 #define GAN_SYMMATL_LRMULT_S               gan_symmat22f_lrmultm22T_s
00616 #define GAN_SYMMATR_LRMULT_Q               gan_symmat22f_lrmultm22_q
00617 #define GAN_SYMMATR_LRMULT_S               gan_symmat22f_lrmultm22_s
00618 #define GAN_MAT_LMULTL_Q                   gan_mat22f_lmultl22_q
00619 #define GAN_MAT_LMULTL_S                   gan_mat22f_lmultl22_s
00620 #define GAN_MAT_LMULTL_I                   gan_mat22f_lmultl22_i
00621 #define GAN_MAT_LMULTLI_Q                  gan_mat22f_lmultl22I_q
00622 #define GAN_MAT_LMULTLI_S                  gan_mat22f_lmultl22I_s
00623 #define GAN_MAT_LMULTLI_I                  gan_mat22f_lmultl22I_i
00624 #define GAN_MAT_LMULTLT_Q                  gan_mat22f_lmultl22T_q
00625 #define GAN_MAT_LMULTLT_S                  gan_mat22f_lmultl22T_s
00626 #define GAN_MAT_LMULTLT_I                  gan_mat22f_lmultl22T_i
00627 #define GAN_MAT_LMULTLIT_Q                 gan_mat22f_lmultl22IT_q
00628 #define GAN_MAT_LMULTLIT_S                 gan_mat22f_lmultl22IT_s
00629 #define GAN_MAT_LMULTLIT_I                 gan_mat22f_lmultl22IT_i
00630 #define GAN_MAT_RMULTL_Q                   gan_mat22f_rmultl22_q
00631 #define GAN_MAT_RMULTL_S                   gan_mat22f_rmultl22_s
00632 #define GAN_MAT_RMULTL_I                   gan_mat22f_rmultl22_i
00633 #define GAN_MAT_RMULTLI_Q                  gan_mat22f_rmultl22I_q
00634 #define GAN_MAT_RMULTLI_S                  gan_mat22f_rmultl22I_s
00635 #define GAN_MAT_RMULTLI_I                  gan_mat22f_rmultl22I_i
00636 #define GAN_MAT_RMULTLT_Q                  gan_mat22f_rmultl22T_q
00637 #define GAN_MAT_RMULTLT_S                  gan_mat22f_rmultl22T_s
00638 #define GAN_MAT_RMULTLT_I                  gan_mat22f_rmultl22T_i
00639 #define GAN_MAT_RMULTLIT_Q                 gan_mat22f_rmultl22IT_q
00640 #define GAN_MAT_RMULTLIT_S                 gan_mat22f_rmultl22IT_s
00641 #define GAN_MAT_RMULTLIT_I                 gan_mat22f_rmultl22IT_i
00642 #define GAN_MAT_SUMSQR_Q                   gan_mat22f_sumsqr_q
00643 #define GAN_MAT_SUMSQR_S                   gan_mat22f_sumsqr_s
00644 #define GAN_MAT_FNORM_Q                    gan_mat22f_Fnorm_q
00645 #define GAN_MAT_FNORM_S                    gan_mat22f_Fnorm_s
00646 #define GAN_MAT_FROM_MAT_Q                 gan_mat22f_from_matf_q
00647 #define GAN_MAT_FROM_MAT_S                 gan_mat22f_from_matf_s
00648 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat22f_from_squmatf_q
00649 #define GAN_MAT_FROM_SQUMAT_S              gan_mat22f_from_squmatf_s
00650 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat22f_from_squmatf_q
00651 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat22f_from_squmatf_s
00652 
00653 #define GAN_SQUMAT_IDENT_Q    gan_mat22f_ident_q
00654 #define GAN_SQUMAT_IDENT_S    gan_mat22f_ident_s
00655 #define GAN_SQUMAT_TPOSE_Q    gan_mat22f_tpose_q
00656 #define GAN_SQUMAT_TPOSE_S    gan_mat22f_tpose_s
00657 #define GAN_SQUMAT_TPOSE_I    gan_mat22f_tpose_i
00658 #define GAN_MAT_SADDT_Q       gan_mat22f_saddT_q
00659 #define GAN_MAT_SADDT_S       gan_mat22f_saddT_s
00660 #define GAN_SQUMAT_INVERT     gan_mat22f_invert
00661 #define GAN_SQUMAT_INVERT_Q   gan_mat22f_invert_q
00662 #define GAN_SQUMAT_INVERT_S   gan_mat22f_invert_s
00663 #define GAN_SQUMAT_INVERT_I   gan_mat22f_invert_i
00664 #define GAN_SQUMAT_ADJOINT_Q  gan_mat22f_adjoint_q
00665 #define GAN_SQUMAT_ADJOINT_S  gan_mat22f_adjoint_s
00666 #define GAN_SQUMAT_ADJOINTT_Q gan_mat22f_adjointT_q
00667 #define GAN_SQUMAT_ADJOINTT_S gan_mat22f_adjointT_s
00668 #define GAN_SQUMAT_DET_Q      gan_mat22f_det_q
00669 #define GAN_SQUMAT_DET_S      gan_mat22f_det_s
00670 #define GAN_SQUMAT_TRACE_Q    gan_mat22f_trace_q
00671 #define GAN_SQUMAT_TRACE_S    gan_mat22f_trace_s
00672 
00673 #ifndef _GAN_2X2MATF_H
00674 #define _GAN_2X2MATF_H
00675 
00676 
00677 #endif /* #ifndef _GAN_2X2MATF_H */
00678 
00691 /* This library is free software; you can redistribute it and/or
00692    modify it under the terms of the GNU Lesser General Public
00693    License as published by the Free Software Foundation; either
00694    version 2.1 of the License, or (at your option) any later version.
00695 
00696    This library is distributed in the hope that it will be useful,
00697    but WITHOUT ANY WARRANTY; without even the implied warranty of
00698    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00699    Lesser General Public License for more details.
00700 
00701    You should have received a copy of the GNU Lesser General Public
00702    License along with this library; if not, write to the Free Software
00703    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00704 */
00705 
00706 /* function declarations for functions common to all small square matrix
00707  * types */
00708 
00709 
00710 
00711 /* documentation for macros defined in individual header files */
00712 
00725  Gan_Matrix22_f *gan_mat22f_ident_q ( Gan_Matrix22_f *A );
00726 
00744  Gan_Matrix22_f *gan_mat22f_tpose_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00745 
00763  Gan_SquMatrix22_f *gan_mat22f_saddT_q ( const Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
00764 
00795  Gan_Matrix22_f *gan_mat22f_invert_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00796 
00805  Gan_Matrix22_f *gan_mat22f_invert_i ( Gan_Matrix22_f *A );
00806 
00821  float gan_mat22f_det_q ( const Gan_Matrix22_f *A );
00822 
00828  float gan_mat22f_trace_q ( const Gan_Matrix22_f *A );
00829 
00835 #undef GAN_SQUMAT_IDENT_Q
00836 #undef GAN_SQUMAT_IDENT_S
00837 #undef GAN_SQUMAT_TPOSE_Q
00838 #undef GAN_SQUMAT_TPOSE_S
00839 #undef GAN_SQUMAT_TPOSE_I
00840 #undef GAN_MAT_SADDT_Q
00841 #undef GAN_MAT_SADDT_S
00842 #undef GAN_SQUMATI_MULTV_Q
00843 #undef GAN_SQUMATI_MULTV_S
00844 #undef GAN_SQUMATI_MULTV_I
00845 #undef GAN_SQUMATIT_MULTV_Q
00846 #undef GAN_SQUMATIT_MULTV_S
00847 #undef GAN_SQUMATIT_MULTV_I
00848 #undef GAN_SQUMAT_INVERT
00849 #undef GAN_SQUMAT_INVERT_Q
00850 #undef GAN_SQUMAT_INVERT_S
00851 #undef GAN_SQUMAT_INVERT_I
00852 #undef GAN_SQUMAT_ADJOINT_Q
00853 #undef GAN_SQUMAT_ADJOINT_S
00854 #undef GAN_SQUMAT_ADJOINTT_Q
00855 #undef GAN_SQUMAT_ADJOINTT_S
00856 #undef GAN_SQUMAT_DET_Q
00857 #undef GAN_SQUMAT_DET_S
00858 #undef GAN_SQUMAT_TRACE_Q
00859 #undef GAN_SQUMAT_TRACE_S
00860 
00873 /* This library is free software; you can redistribute it and/or
00874    modify it under the terms of the GNU Lesser General Public
00875    License as published by the Free Software Foundation; either
00876    version 2.1 of the License, or (at your option) any later version.
00877 
00878    This library is distributed in the hope that it will be useful,
00879    but WITHOUT ANY WARRANTY; without even the implied warranty of
00880    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00881    Lesser General Public License for more details.
00882 
00883    You should have received a copy of the GNU Lesser General Public
00884    License along with this library; if not, write to the Free Software
00885    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00886 */
00887 
00888 /* function declarations for functions common to all small vector types */
00889 
00890 
00891 
00892 /* documentation for macros defined in individual header files */
00893 
00904  Gan_Matrix22_f *gan_mat22f_zero_q ( const Gan_Matrix22_f *A );
00905 
00922  Gan_Matrix22_f *gan_mat22f_copy_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00923 
00941  Gan_Matrix22_f *gan_mat22f_scale_q ( Gan_Matrix22_f *A, float a,
00942                                Gan_Matrix22_f *B );
00943 
00951  Gan_Matrix22_f *gan_mat22f_scale_i ( Gan_Matrix22_f *A, float a );
00952 
00961  Gan_Matrix22_f *gan_mat22f_divide_q ( Gan_Matrix22_f *A, float a,
00962                                 Gan_Matrix22_f *B );
00963 
00971  Gan_Matrix22_f *gan_mat22f_divide_i ( Gan_Matrix22_f *A, float a );
00972 
00980  Gan_Matrix22_f *gan_mat22f_negate_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
00981 
00989  Gan_Matrix22_f *gan_mat22f_negate_i ( Gan_Matrix22_f *A );
00990 
00998  Gan_Matrix22_f *gan_mat22f_unit_i ( Gan_Matrix22_f *A );
00999 
01017  Gan_Matrix22_f *gan_mat22f_add_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B, Gan_Matrix22_f *C );
01018 
01027  Gan_Matrix22_f *gan_mat22f_add_i1 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01028 
01037  Gan_Matrix22_f *gan_mat22f_add_i2 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01038 
01047  Gan_Matrix22_f *gan_mat22f_increment ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01048 
01066  Gan_Matrix22_f *gan_mat22f_sub_q ( Gan_Matrix22_f *A, Gan_Matrix22_f *B, Gan_Matrix22_f *C );
01067 
01076  Gan_Matrix22_f *gan_mat22f_sub_i1 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01077 
01086  Gan_Matrix22_f *gan_mat22f_sub_i2 ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01087 
01096  Gan_Matrix22_f *gan_mat22f_decrement ( Gan_Matrix22_f *A, Gan_Matrix22_f *B );
01097 
01115  Gan_Matrix22_f *gan_vec22f_outer_q ( const Gan_Vector2_f *p, const Gan_Vector2_f *q,
01116                                Gan_Matrix22_f *A );
01117 
01126  Gan_Vector2_f *gan_mat22f_multv2_q ( const Gan_Matrix22_f *A, Gan_Vector2_f *p,
01127                                 Gan_Vector2_f *q );
01128 
01129 
01138  Gan_Vector2_f *gan_mat22Tf_multv2_q ( const Gan_Matrix22_f *A, Gan_Vector2_f *p,
01139                                  Gan_Vector2_f *q );
01140 
01141 
01161  Gan_Matrix22_f *gan_mat22f_lmultm22T_q ( Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
01162                                  Gan_Matrix22_f *C );
01163 
01173  Gan_Matrix22_f *gan_mat22f_rmultm22_q ( Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
01174                                 Gan_Matrix22_f *C );
01175 
01185  Gan_Matrix22_f *gan_mat22f_rmultm22T_q ( Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
01186                                  Gan_Matrix22_f *C );
01187 
01199  Gan_SquMatrix22_f *gan_mat22f_lmultm22T_sym_q ( const Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
01200                                          Gan_SquMatrix22_f *C );
01201 
01213  Gan_SquMatrix22_f *gan_mat22f_rmultm22T_sym_q ( const Gan_Matrix22_f *A, const Gan_Matrix22_f *B,
01214                                          Gan_SquMatrix22_f *C );
01215 
01224  Gan_Matrix22_f *gan_mat22f_lmults22_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01225                                 Gan_Matrix22_f *C );
01226 
01235  Gan_Matrix22_f *gan_mat22f_rmults22_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01236                                 Gan_Matrix22_f *C );
01237 
01257  Gan_SquMatrix22_f *gan_symmat22f_lrmultm22T_q ( const Gan_SquMatrix22_f *A, const Gan_Matrix22_f *B,
01258                                         const Gan_Matrix22_f *C, Gan_SquMatrix22_f *D );
01259 
01270  Gan_SquMatrix22_f *gan_symmat22f_lrmultm22_q ( const Gan_SquMatrix22_f *A, const Gan_Matrix22_f *B,
01271                                         const Gan_Matrix22_f *C, Gan_SquMatrix22_f *D );
01272 
01291  Gan_Matrix22_f *gan_mat22f_lmultl22_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01292                                 Gan_Matrix22_f *C );
01293 
01303  Gan_Matrix22_f *gan_mat22f_lmultl22I_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01304                                  Gan_Matrix22_f *C );
01305 
01315  Gan_Matrix22_f *gan_mat22f_lmultl22T_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01316                                  Gan_Matrix22_f *C );
01317 
01327  Gan_Matrix22_f *gan_mat22f_lmultl22IT_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01328                                   Gan_Matrix22_f *C );
01329 
01339  Gan_Matrix22_f *gan_mat22f_rmultl22_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01340                                 Gan_Matrix22_f *C );
01341 
01351  Gan_Matrix22_f *gan_mat22f_rmultl22I_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01352                                  Gan_Matrix22_f *C );
01353 
01363  Gan_Matrix22_f *gan_mat22f_rmultl22T_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01364                                  Gan_Matrix22_f *C );
01365 
01375  Gan_Matrix22_f *gan_mat22f_rmultl22IT_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B,
01376                                   Gan_Matrix22_f *C );
01377 
01387  Gan_Matrix22_f *gan_mat22f_lmultl22_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01388 
01398  Gan_Matrix22_f *gan_mat22f_lmultl22I_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01399 
01409  Gan_Matrix22_f *gan_mat22f_lmultl22T_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01410 
01420  Gan_Matrix22_f *gan_mat22f_lmultl22IT_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01421 
01431  Gan_Matrix22_f *gan_mat22f_rmultl22_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01432 
01442  Gan_Matrix22_f *gan_mat22f_rmultl22I_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01443 
01453  Gan_Matrix22_f *gan_mat22f_rmultl22T_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01454 
01464  Gan_Matrix22_f *gan_mat22f_rmultl22IT_i ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01465 
01474  Gan_SquMatrix22_f *gan_mat22f_slmultT_q ( Gan_Matrix22_f *A, const Gan_SquMatrix22_f *B );
01475 
01476 
01485  Gan_SquMatrix22_f *gan_mat22f_srmultT_q ( const Gan_Matrix22_f *A, Gan_SquMatrix22_f *B );
01486 
01487 
01502  float gan_mat22f_sumsqr_q ( const Gan_Matrix22_f *A );
01503 
01510  float gan_mat22f_Fnorm_q ( const Gan_Matrix22_f *A );
01511 
01521  Gan_Matrix22_f *gan_mat22f_from_matf_q ( const Gan_Matrix_f *A, Gan_Matrix22_f *B );
01522 
01523  Gan_Matrix22_f *gan_mat22f_from_squmatf_q ( const Gan_SquMatrix_f *A, Gan_Matrix22_f *B );
01524 
01525  Gan_SquMatrix22_f *gan_squmat22f_from_squmatf_q ( const Gan_SquMatrix_f *A,
01526                                             Gan_SquMatrix22_f *B );
01527 
01546 /* This library is free software; you can redistribute it and/or
01547    modify it under the terms of the GNU Lesser General Public
01548    License as published by the Free Software Foundation; either
01549    version 2.1 of the License, or (at your option) any later version.
01550 
01551    This library is distributed in the hope that it will be useful,
01552    but WITHOUT ANY WARRANTY; without even the implied warranty of
01553    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01554    Lesser General Public License for more details.
01555 
01556    You should have received a copy of the GNU Lesser General Public
01557    License along with this library; if not, write to the Free Software
01558    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01559 */
01560 
01561 #undef GAN_MATTYPE
01562 #undef GAN_MATRIX_TYPE
01563 #undef GAN_SQUMATRIX_TYPE
01564 #undef GAN_VECTOR_TYPE
01565 #undef GAN_MAT_ELEMENT_TYPE
01566 #undef GAN_REALTYPE
01567 #undef GAN_FWRITE_LENDIAN
01568 #undef GAN_FREAD_LENDIAN
01569 #undef GAN_VECTYPE1
01570 #undef GAN_VECTYPE2
01571 #undef GAN_MATTYPEL
01572 #undef GAN_MATTYPER
01573 #undef GAN_SQUMATTYPEL
01574 #undef GAN_SQUMATTYPER
01575 #undef GAN_FIXED_MATRIX_TYPE
01576 #undef GAN_MAT_FPRINT
01577 #undef GAN_MAT_PRINT
01578 #undef GAN_MAT_FSCANF
01579 #undef GAN_MAT_FWRITE
01580 #undef GAN_MAT_FREAD
01581 #undef GAN_MAT_ZERO_Q
01582 #undef GAN_MAT_ZERO_S
01583 #undef GAN_MAT_COPY_Q
01584 #undef GAN_MAT_COPY_S
01585 #undef GAN_MAT_SCALE_Q
01586 #undef GAN_MAT_SCALE_S
01587 #undef GAN_MAT_SCALE_I
01588 #undef GAN_MAT_DIVIDE_Q
01589 #undef GAN_MAT_DIVIDE_S
01590 #undef GAN_MAT_DIVIDE_I
01591 #undef GAN_MAT_NEGATE_Q
01592 #undef GAN_MAT_NEGATE_S
01593 #undef GAN_MAT_NEGATE_I
01594 #undef GAN_MAT_UNIT_Q
01595 #undef GAN_MAT_UNIT_S
01596 #undef GAN_MAT_UNIT_I
01597 #undef GAN_MAT_ADD_Q
01598 #undef GAN_MAT_ADD_I1
01599 #undef GAN_MAT_ADD_I2
01600 #undef GAN_MAT_INCREMENT
01601 #undef GAN_MAT_ADD_S
01602 #undef GAN_MAT_SUB_Q
01603 #undef GAN_MAT_SUB_I1
01604 #undef GAN_MAT_SUB_I2
01605 #undef GAN_MAT_DECREMENT
01606 #undef GAN_MAT_SUB_S
01607 #undef GAN_VEC_OUTER_Q
01608 #undef GAN_VEC_OUTER_S
01609 #undef GAN_MAT_MULTV_Q
01610 #undef GAN_MAT_MULTV_S
01611 #undef GAN_MAT_MULTV_I
01612 #undef GAN_MATT_MULTV_Q
01613 #undef GAN_MATT_MULTV_S
01614 #undef GAN_MATT_MULTV_I
01615 #undef GAN_MAT_LMULTM_Q
01616 #undef GAN_MAT_LMULTM_S
01617 #undef GAN_MAT_LMULTMT_Q
01618 #undef GAN_MAT_LMULTMT_S
01619 #undef GAN_MAT_RMULTM_Q
01620 #undef GAN_MAT_RMULTM_S
01621 #undef GAN_MAT_RMULTMT_Q
01622 #undef GAN_MAT_RMULTMT_S
01623 #undef GAN_MAT_LMULTMT_SYM_Q
01624 #undef GAN_MAT_LMULTMT_SYM_S
01625 #undef GAN_MAT_RMULTMT_SYM_Q
01626 #undef GAN_MAT_RMULTMT_SYM_S
01627 #undef GAN_MAT_LMULTS_Q
01628 #undef GAN_MAT_LMULTS_S
01629 #undef GAN_MAT_RMULTS_Q
01630 #undef GAN_MAT_RMULTS_S
01631 #undef GAN_SYMMATL_LRMULT_Q
01632 #undef GAN_SYMMATL_LRMULT_S
01633 #undef GAN_SYMMATR_LRMULT_Q
01634 #undef GAN_SYMMATR_LRMULT_S
01635 #undef GAN_MAT_LMULTL_Q
01636 #undef GAN_MAT_LMULTL_S
01637 #undef GAN_MAT_LMULTL_I
01638 #undef GAN_MAT_LMULTLI_Q
01639 #undef GAN_MAT_LMULTLI_S
01640 #undef GAN_MAT_LMULTLI_I
01641 #undef GAN_MAT_LMULTLT_Q
01642 #undef GAN_MAT_LMULTLT_S
01643 #undef GAN_MAT_LMULTLT_I
01644 #undef GAN_MAT_LMULTLIT_Q
01645 #undef GAN_MAT_LMULTLIT_S
01646 #undef GAN_MAT_LMULTLIT_I
01647 #undef GAN_MAT_RMULTL_Q
01648 #undef GAN_MAT_RMULTL_S
01649 #undef GAN_MAT_RMULTL_I
01650 #undef GAN_MAT_RMULTLI_Q
01651 #undef GAN_MAT_RMULTLI_S
01652 #undef GAN_MAT_RMULTLI_I
01653 #undef GAN_MAT_RMULTLT_Q
01654 #undef GAN_MAT_RMULTLT_S
01655 #undef GAN_MAT_RMULTLT_I
01656 #undef GAN_MAT_RMULTLIT_Q
01657 #undef GAN_MAT_RMULTLIT_S
01658 #undef GAN_MAT_RMULTLIT_I
01659 #undef GAN_MAT_SRMULTT_Q
01660 #undef GAN_MAT_SRMULTT_S
01661 #undef GAN_MAT_SRMULTT_I
01662 #undef GAN_MAT_SLMULTT_Q
01663 #undef GAN_MAT_SLMULTT_S
01664 #undef GAN_MAT_SLMULTT_I
01665 #undef GAN_MAT_RMULTLIT_S
01666 #undef GAN_MAT_SUMSQR_Q
01667 #undef GAN_MAT_SUMSQR_S
01668 #undef GAN_MAT_FNORM_Q
01669 #undef GAN_MAT_FNORM_S
01670 #undef GAN_MAT_FROM_MAT_Q
01671 #undef GAN_MAT_FROM_MAT_S
01672 #undef GAN_MAT_FROM_SQUMAT_Q
01673 #undef GAN_MAT_FROM_SQUMAT_S
01674 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01675 #undef GAN_SQUMAT_FROM_SQUMAT_S
01676 
01677 /* declare functions specific to symmetric 2x2 matrices */
01691 /* This library is free software; you can redistribute it and/or
01692    modify it under the terms of the GNU Lesser General Public
01693    License as published by the Free Software Foundation; either
01694    version 2.1 of the License, or (at your option) any later version.
01695 
01696    This library is distributed in the hope that it will be useful,
01697    but WITHOUT ANY WARRANTY; without even the implied warranty of
01698    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01699    Lesser General Public License for more details.
01700 
01701    You should have received a copy of the GNU Lesser General Public
01702    License along with this library; if not, write to the Free Software
01703    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01704 */
01705 
01706 #ifndef _GAN_2X2SYMMATF_H
01707 
01723  Gan_SquMatrix22_f *gan_symmat22f_fill_q ( Gan_SquMatrix22_f *A,
01724                                           float XX, float YX, float YY );
01725 
01731 #endif /* #ifndef _GAN_2X2SYMMATF_H */
01732 
01733 #define GAN_MATTYPE Gan_SquMatrix22_f
01734 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
01735 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
01736 #define GAN_VECTOR_TYPE Gan_Vector_f
01737 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
01738 #define GAN_REALTYPE float
01739 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
01740 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
01741 #define GAN_VECTYPE1 Gan_Vector2_f
01742 #define GAN_VECTYPE2 Gan_Vector2_f
01743 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX22_F
01744 #define GAN_MAT_FPRINT      gan_symmat22f_fprint
01745 #define GAN_MAT_PRINT       gan_symmat22f_print
01746 #define GAN_MAT_FSCANF      gan_symmat22f_fscanf
01747 #define GAN_MAT_FWRITE      gan_symmat22f_fwrite
01748 #define GAN_MAT_FREAD       gan_symmat22f_fread
01749 #define GAN_MAT_ZERO_Q      gan_symmat22f_zero_q
01750 #define GAN_MAT_ZERO_S      gan_symmat22f_zero_s
01751 #define GAN_MAT_COPY_Q      gan_symmat22f_copy_q
01752 #define GAN_MAT_COPY_S      gan_symmat22f_copy_s
01753 #define GAN_MAT_SCALE_Q     gan_symmat22f_scale_q
01754 #define GAN_MAT_SCALE_S     gan_symmat22f_scale_s
01755 #define GAN_MAT_SCALE_I     gan_symmat22f_scale_i
01756 #define GAN_MAT_DIVIDE_Q    gan_symmat22f_divide_q
01757 #define GAN_MAT_DIVIDE_S    gan_symmat22f_divide_s
01758 #define GAN_MAT_DIVIDE_I    gan_symmat22f_divide_i
01759 #define GAN_MAT_NEGATE_Q    gan_symmat22f_negate_q
01760 #define GAN_MAT_NEGATE_S    gan_symmat22f_negate_s
01761 #define GAN_MAT_NEGATE_I    gan_symmat22f_negate_i
01762 #define GAN_MAT_UNIT_Q      gan_symmat22f_unit_q
01763 #define GAN_MAT_UNIT_S      gan_symmat22f_unit_s
01764 #define GAN_MAT_UNIT_I      gan_symmat22f_unit_i
01765 #define GAN_MAT_ADD_Q       gan_symmat22f_add_q
01766 #define GAN_MAT_ADD_I1      gan_symmat22f_add_i1
01767 #define GAN_MAT_ADD_I2      gan_symmat22f_add_i2
01768 #define GAN_MAT_INCREMENT   gan_symmat22f_increment
01769 #define GAN_MAT_ADD_S       gan_symmat22f_add_s
01770 #define GAN_MAT_SUB_Q       gan_symmat22f_sub_q
01771 #define GAN_MAT_SUB_I1      gan_symmat22f_sub_i1
01772 #define GAN_MAT_SUB_I2      gan_symmat22f_sub_i2
01773 #define GAN_MAT_DECREMENT   gan_symmat22f_decrement
01774 #define GAN_MAT_SUB_S       gan_symmat22f_sub_s
01775 #define GAN_MAT_MULTV_Q     gan_symmat22f_multv2_q
01776 #define GAN_MAT_MULTV_S     gan_symmat22f_multv2_s
01777 #define GAN_MAT_SUMSQR_Q    gan_symmat22f_sumsqr_q
01778 #define GAN_MAT_SUMSQR_S    gan_symmat22f_sumsqr_s
01779 #define GAN_MAT_FNORM_Q     gan_symmat22f_Fnorm_q
01780 #define GAN_MAT_FNORM_S     gan_symmat22f_Fnorm_s
01781 
01782 #define GAN_SQUMAT_IDENT_Q       gan_symmat22f_ident_q
01783 #define GAN_SQUMAT_IDENT_S       gan_symmat22f_ident_s
01784 #define GAN_SQUMAT_INVERT        gan_symmat22f_invert
01785 #define GAN_SQUMAT_INVERT_Q      gan_symmat22f_invert_q
01786 #define GAN_SQUMAT_INVERT_S      gan_symmat22f_invert_s
01787 #define GAN_SQUMAT_INVERT_I      gan_symmat22f_invert_i
01788 #define GAN_SQUMAT_DET_Q         gan_symmat22f_det_q
01789 #define GAN_SQUMAT_DET_S         gan_symmat22f_det_s
01790 #define GAN_SQUMAT_TRACE_Q       gan_symmat22f_trace_q
01791 #define GAN_SQUMAT_TRACE_S       gan_symmat22f_trace_s
01792 
01793 #define GAN_VEC_OUTER_SYM_Q    gan_vec22f_outer_sym_q
01794 #define GAN_VEC_OUTER_SYM_S    gan_vec22f_outer_sym_s
01795 #define GAN_SYMMAT_CHOLESKY    gan_symmat22f_cholesky
01796 #define GAN_SYMMAT_CHOLESKY_Q  gan_symmat22f_cholesky_q
01797 #define GAN_SYMMAT_CHOLESKY_S  gan_symmat22f_cholesky_s
01798 #define GAN_SYMMAT_CHOLESKY_I  gan_symmat22f_cholesky_i
01799 
01800 #ifndef _GAN_2X2SYMMATF_H
01801 #define _GAN_2X2SYMMATF_H
01802 
01803 
01804 #endif /* #ifndef _GAN_2X2SYMMATF_H */
01805 
01818 /* This library is free software; you can redistribute it and/or
01819    modify it under the terms of the GNU Lesser General Public
01820    License as published by the Free Software Foundation; either
01821    version 2.1 of the License, or (at your option) any later version.
01822 
01823    This library is distributed in the hope that it will be useful,
01824    but WITHOUT ANY WARRANTY; without even the implied warranty of
01825    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01826    Lesser General Public License for more details.
01827 
01828    You should have received a copy of the GNU Lesser General Public
01829    License along with this library; if not, write to the Free Software
01830    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01831 */
01832 
01833 /* function declarations for functions common to all small symmetric matrix
01834  * types */
01835 
01836 
01837 
01838 /* documentation for macros defined in individual header files */
01839 
01850  Gan_SquMatrix22_f *gan_vec22f_outer_sym_q ( const Gan_Vector2_f *p, Gan_SquMatrix22_f *A );
01851 
01873  Gan_SquMatrix22_f *gan_symmat22f_cholesky_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
01874 
01883  Gan_SquMatrix22_f *gan_symmat22f_cholesky_i ( Gan_SquMatrix22_f *A );
01884 
01890 #undef GAN_VEC_OUTER_SYM_Q
01891 #undef GAN_VEC_OUTER_SYM_S
01892 #undef GAN_SYMMAT_CHOLESKY
01893 #undef GAN_SYMMAT_CHOLESKY_Q
01894 #undef GAN_SYMMAT_CHOLESKY_S
01895 #undef GAN_SYMMAT_CHOLESKY_I
01896 
01909 /* This library is free software; you can redistribute it and/or
01910    modify it under the terms of the GNU Lesser General Public
01911    License as published by the Free Software Foundation; either
01912    version 2.1 of the License, or (at your option) any later version.
01913 
01914    This library is distributed in the hope that it will be useful,
01915    but WITHOUT ANY WARRANTY; without even the implied warranty of
01916    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01917    Lesser General Public License for more details.
01918 
01919    You should have received a copy of the GNU Lesser General Public
01920    License along with this library; if not, write to the Free Software
01921    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01922 */
01923 
01924 /* function declarations for functions common to all small square matrix
01925  * types */
01926 
01927 
01928 
01929 /* documentation for macros defined in individual header files */
01930 
01943  Gan_SquMatrix22_f *gan_symmat22f_ident_q ( Gan_SquMatrix22_f *A );
01944 
01995  Gan_SquMatrix22_f *gan_symmat22f_invert_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
01996 
02005  Gan_SquMatrix22_f *gan_symmat22f_invert_i ( Gan_SquMatrix22_f *A );
02006 
02021  float gan_symmat22f_det_q ( const Gan_SquMatrix22_f *A );
02022 
02028  float gan_symmat22f_trace_q ( const Gan_SquMatrix22_f *A );
02029 
02035 #undef GAN_SQUMAT_IDENT_Q
02036 #undef GAN_SQUMAT_IDENT_S
02037 #undef GAN_SQUMAT_TPOSE_Q
02038 #undef GAN_SQUMAT_TPOSE_S
02039 #undef GAN_SQUMAT_TPOSE_I
02040 #undef GAN_MAT_SADDT_Q
02041 #undef GAN_MAT_SADDT_S
02042 #undef GAN_SQUMATI_MULTV_Q
02043 #undef GAN_SQUMATI_MULTV_S
02044 #undef GAN_SQUMATI_MULTV_I
02045 #undef GAN_SQUMATIT_MULTV_Q
02046 #undef GAN_SQUMATIT_MULTV_S
02047 #undef GAN_SQUMATIT_MULTV_I
02048 #undef GAN_SQUMAT_INVERT
02049 #undef GAN_SQUMAT_INVERT_Q
02050 #undef GAN_SQUMAT_INVERT_S
02051 #undef GAN_SQUMAT_INVERT_I
02052 #undef GAN_SQUMAT_ADJOINT_Q
02053 #undef GAN_SQUMAT_ADJOINT_S
02054 #undef GAN_SQUMAT_ADJOINTT_Q
02055 #undef GAN_SQUMAT_ADJOINTT_S
02056 #undef GAN_SQUMAT_DET_Q
02057 #undef GAN_SQUMAT_DET_S
02058 #undef GAN_SQUMAT_TRACE_Q
02059 #undef GAN_SQUMAT_TRACE_S
02060 
02073 /* This library is free software; you can redistribute it and/or
02074    modify it under the terms of the GNU Lesser General Public
02075    License as published by the Free Software Foundation; either
02076    version 2.1 of the License, or (at your option) any later version.
02077 
02078    This library is distributed in the hope that it will be useful,
02079    but WITHOUT ANY WARRANTY; without even the implied warranty of
02080    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02081    Lesser General Public License for more details.
02082 
02083    You should have received a copy of the GNU Lesser General Public
02084    License along with this library; if not, write to the Free Software
02085    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02086 */
02087 
02088 /* function declarations for functions common to all small vector types */
02089 
02090 
02091 
02092 /* documentation for macros defined in individual header files */
02093 
02104  Gan_SquMatrix22_f *gan_symmat22f_zero_q ( const Gan_SquMatrix22_f *A );
02105 
02122  Gan_SquMatrix22_f *gan_symmat22f_copy_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02123 
02141  Gan_SquMatrix22_f *gan_symmat22f_scale_q ( Gan_SquMatrix22_f *A, float a,
02142                                Gan_SquMatrix22_f *B );
02143 
02151  Gan_SquMatrix22_f *gan_symmat22f_scale_i ( Gan_SquMatrix22_f *A, float a );
02152 
02161  Gan_SquMatrix22_f *gan_symmat22f_divide_q ( Gan_SquMatrix22_f *A, float a,
02162                                 Gan_SquMatrix22_f *B );
02163 
02171  Gan_SquMatrix22_f *gan_symmat22f_divide_i ( Gan_SquMatrix22_f *A, float a );
02172 
02180  Gan_SquMatrix22_f *gan_symmat22f_negate_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02181 
02189  Gan_SquMatrix22_f *gan_symmat22f_negate_i ( Gan_SquMatrix22_f *A );
02190 
02198  Gan_SquMatrix22_f *gan_symmat22f_unit_i ( Gan_SquMatrix22_f *A );
02199 
02217  Gan_SquMatrix22_f *gan_symmat22f_add_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
02218 
02227  Gan_SquMatrix22_f *gan_symmat22f_add_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02228 
02237  Gan_SquMatrix22_f *gan_symmat22f_add_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02238 
02247  Gan_SquMatrix22_f *gan_symmat22f_increment ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02248 
02266  Gan_SquMatrix22_f *gan_symmat22f_sub_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
02267 
02276  Gan_SquMatrix22_f *gan_symmat22f_sub_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02277 
02286  Gan_SquMatrix22_f *gan_symmat22f_sub_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02287 
02296  Gan_SquMatrix22_f *gan_symmat22f_decrement ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02297 
02316  Gan_Vector2_f *gan_symmat22f_multv2_q ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
02317                                 Gan_Vector2_f *q );
02318 
02319 
02320 
02321 
02393  float gan_symmat22f_sumsqr_q ( const Gan_SquMatrix22_f *A );
02394 
02401  float gan_symmat22f_Fnorm_q ( const Gan_SquMatrix22_f *A );
02402 
02433 /* This library is free software; you can redistribute it and/or
02434    modify it under the terms of the GNU Lesser General Public
02435    License as published by the Free Software Foundation; either
02436    version 2.1 of the License, or (at your option) any later version.
02437 
02438    This library is distributed in the hope that it will be useful,
02439    but WITHOUT ANY WARRANTY; without even the implied warranty of
02440    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02441    Lesser General Public License for more details.
02442 
02443    You should have received a copy of the GNU Lesser General Public
02444    License along with this library; if not, write to the Free Software
02445    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02446 */
02447 
02448 #undef GAN_MATTYPE
02449 #undef GAN_MATRIX_TYPE
02450 #undef GAN_SQUMATRIX_TYPE
02451 #undef GAN_VECTOR_TYPE
02452 #undef GAN_MAT_ELEMENT_TYPE
02453 #undef GAN_REALTYPE
02454 #undef GAN_FWRITE_LENDIAN
02455 #undef GAN_FREAD_LENDIAN
02456 #undef GAN_VECTYPE1
02457 #undef GAN_VECTYPE2
02458 #undef GAN_MATTYPEL
02459 #undef GAN_MATTYPER
02460 #undef GAN_SQUMATTYPEL
02461 #undef GAN_SQUMATTYPER
02462 #undef GAN_FIXED_MATRIX_TYPE
02463 #undef GAN_MAT_FPRINT
02464 #undef GAN_MAT_PRINT
02465 #undef GAN_MAT_FSCANF
02466 #undef GAN_MAT_FWRITE
02467 #undef GAN_MAT_FREAD
02468 #undef GAN_MAT_ZERO_Q
02469 #undef GAN_MAT_ZERO_S
02470 #undef GAN_MAT_COPY_Q
02471 #undef GAN_MAT_COPY_S
02472 #undef GAN_MAT_SCALE_Q
02473 #undef GAN_MAT_SCALE_S
02474 #undef GAN_MAT_SCALE_I
02475 #undef GAN_MAT_DIVIDE_Q
02476 #undef GAN_MAT_DIVIDE_S
02477 #undef GAN_MAT_DIVIDE_I
02478 #undef GAN_MAT_NEGATE_Q
02479 #undef GAN_MAT_NEGATE_S
02480 #undef GAN_MAT_NEGATE_I
02481 #undef GAN_MAT_UNIT_Q
02482 #undef GAN_MAT_UNIT_S
02483 #undef GAN_MAT_UNIT_I
02484 #undef GAN_MAT_ADD_Q
02485 #undef GAN_MAT_ADD_I1
02486 #undef GAN_MAT_ADD_I2
02487 #undef GAN_MAT_INCREMENT
02488 #undef GAN_MAT_ADD_S
02489 #undef GAN_MAT_SUB_Q
02490 #undef GAN_MAT_SUB_I1
02491 #undef GAN_MAT_SUB_I2
02492 #undef GAN_MAT_DECREMENT
02493 #undef GAN_MAT_SUB_S
02494 #undef GAN_VEC_OUTER_Q
02495 #undef GAN_VEC_OUTER_S
02496 #undef GAN_MAT_MULTV_Q
02497 #undef GAN_MAT_MULTV_S
02498 #undef GAN_MAT_MULTV_I
02499 #undef GAN_MATT_MULTV_Q
02500 #undef GAN_MATT_MULTV_S
02501 #undef GAN_MATT_MULTV_I
02502 #undef GAN_MAT_LMULTM_Q
02503 #undef GAN_MAT_LMULTM_S
02504 #undef GAN_MAT_LMULTMT_Q
02505 #undef GAN_MAT_LMULTMT_S
02506 #undef GAN_MAT_RMULTM_Q
02507 #undef GAN_MAT_RMULTM_S
02508 #undef GAN_MAT_RMULTMT_Q
02509 #undef GAN_MAT_RMULTMT_S
02510 #undef GAN_MAT_LMULTMT_SYM_Q
02511 #undef GAN_MAT_LMULTMT_SYM_S
02512 #undef GAN_MAT_RMULTMT_SYM_Q
02513 #undef GAN_MAT_RMULTMT_SYM_S
02514 #undef GAN_MAT_LMULTS_Q
02515 #undef GAN_MAT_LMULTS_S
02516 #undef GAN_MAT_RMULTS_Q
02517 #undef GAN_MAT_RMULTS_S
02518 #undef GAN_SYMMATL_LRMULT_Q
02519 #undef GAN_SYMMATL_LRMULT_S
02520 #undef GAN_SYMMATR_LRMULT_Q
02521 #undef GAN_SYMMATR_LRMULT_S
02522 #undef GAN_MAT_LMULTL_Q
02523 #undef GAN_MAT_LMULTL_S
02524 #undef GAN_MAT_LMULTL_I
02525 #undef GAN_MAT_LMULTLI_Q
02526 #undef GAN_MAT_LMULTLI_S
02527 #undef GAN_MAT_LMULTLI_I
02528 #undef GAN_MAT_LMULTLT_Q
02529 #undef GAN_MAT_LMULTLT_S
02530 #undef GAN_MAT_LMULTLT_I
02531 #undef GAN_MAT_LMULTLIT_Q
02532 #undef GAN_MAT_LMULTLIT_S
02533 #undef GAN_MAT_LMULTLIT_I
02534 #undef GAN_MAT_RMULTL_Q
02535 #undef GAN_MAT_RMULTL_S
02536 #undef GAN_MAT_RMULTL_I
02537 #undef GAN_MAT_RMULTLI_Q
02538 #undef GAN_MAT_RMULTLI_S
02539 #undef GAN_MAT_RMULTLI_I
02540 #undef GAN_MAT_RMULTLT_Q
02541 #undef GAN_MAT_RMULTLT_S
02542 #undef GAN_MAT_RMULTLT_I
02543 #undef GAN_MAT_RMULTLIT_Q
02544 #undef GAN_MAT_RMULTLIT_S
02545 #undef GAN_MAT_RMULTLIT_I
02546 #undef GAN_MAT_SRMULTT_Q
02547 #undef GAN_MAT_SRMULTT_S
02548 #undef GAN_MAT_SRMULTT_I
02549 #undef GAN_MAT_SLMULTT_Q
02550 #undef GAN_MAT_SLMULTT_S
02551 #undef GAN_MAT_SLMULTT_I
02552 #undef GAN_MAT_RMULTLIT_S
02553 #undef GAN_MAT_SUMSQR_Q
02554 #undef GAN_MAT_SUMSQR_S
02555 #undef GAN_MAT_FNORM_Q
02556 #undef GAN_MAT_FNORM_S
02557 #undef GAN_MAT_FROM_MAT_Q
02558 #undef GAN_MAT_FROM_MAT_S
02559 #undef GAN_MAT_FROM_SQUMAT_Q
02560 #undef GAN_MAT_FROM_SQUMAT_S
02561 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02562 #undef GAN_SQUMAT_FROM_SQUMAT_S
02563 
02564 /* declare functions specific to lower triangular 2x2 matrices */
02578 /* This library is free software; you can redistribute it and/or
02579    modify it under the terms of the GNU Lesser General Public
02580    License as published by the Free Software Foundation; either
02581    version 2.1 of the License, or (at your option) any later version.
02582 
02583    This library is distributed in the hope that it will be useful,
02584    but WITHOUT ANY WARRANTY; without even the implied warranty of
02585    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02586    Lesser General Public License for more details.
02587 
02588    You should have received a copy of the GNU Lesser General Public
02589    License along with this library; if not, write to the Free Software
02590    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02591 */
02592 
02593 #ifndef _GAN_2X2LTMATF_H
02594 
02610  Gan_SquMatrix22_f *gan_ltmat22f_fill_q ( Gan_SquMatrix22_f *A,
02611                                          float XX, float YX, float YY );
02612 
02618 #endif /* #ifndef _GAN_2X2LTMATF_H */
02619 
02620 #define GAN_MATTYPE Gan_SquMatrix22_f
02621 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02622 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02623 #define GAN_VECTOR_TYPE Gan_Vector_f
02624 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02625 #define GAN_REALTYPE float
02626 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
02627 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
02628 #define GAN_VECTYPE1 Gan_Vector2_f
02629 #define GAN_VECTYPE2 Gan_Vector2_f
02630 #define GAN_SQUMATTYPEL Gan_SquMatrix22_f
02631 #define GAN_SQUMATTYPER Gan_SquMatrix22_f
02632 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX22_F
02633 #define GAN_MAT_FPRINT     gan_ltmat22f_fprint
02634 #define GAN_MAT_PRINT      gan_ltmat22f_print
02635 #define GAN_MAT_FSCANF     gan_ltmat22f_fscanf
02636 #define GAN_MAT_FWRITE     gan_ltmat22f_fwrite
02637 #define GAN_MAT_FREAD      gan_ltmat22f_fread
02638 #define GAN_MAT_ZERO_Q     gan_ltmat22f_zero_q
02639 #define GAN_MAT_ZERO_S     gan_ltmat22f_zero_s
02640 #define GAN_MAT_COPY_Q     gan_ltmat22f_copy_q
02641 #define GAN_MAT_COPY_S     gan_ltmat22f_copy_s
02642 #define GAN_MAT_SCALE_Q    gan_ltmat22f_scale_q
02643 #define GAN_MAT_SCALE_S    gan_ltmat22f_scale_s
02644 #define GAN_MAT_SCALE_I    gan_ltmat22f_scale_i
02645 #define GAN_MAT_DIVIDE_Q   gan_ltmat22f_divide_q
02646 #define GAN_MAT_DIVIDE_S   gan_ltmat22f_divide_s
02647 #define GAN_MAT_DIVIDE_I   gan_ltmat22f_divide_i
02648 #define GAN_MAT_NEGATE_Q   gan_ltmat22f_negate_q
02649 #define GAN_MAT_NEGATE_S   gan_ltmat22f_negate_s
02650 #define GAN_MAT_NEGATE_I   gan_ltmat22f_negate_i
02651 #define GAN_MAT_UNIT_Q     gan_ltmat22f_unit_q
02652 #define GAN_MAT_UNIT_S     gan_ltmat22f_unit_s
02653 #define GAN_MAT_UNIT_I     gan_ltmat22f_unit_i
02654 #define GAN_MAT_ADD_Q      gan_ltmat22f_add_q
02655 #define GAN_MAT_ADD_I1     gan_ltmat22f_add_i1
02656 #define GAN_MAT_ADD_I2     gan_ltmat22f_add_i2
02657 #define GAN_MAT_INCREMENT  gan_ltmat22f_increment
02658 #define GAN_MAT_ADD_S      gan_ltmat22f_add_s
02659 #define GAN_MAT_SUB_Q      gan_ltmat22f_sub_q
02660 #define GAN_MAT_SUB_I1     gan_ltmat22f_sub_i1
02661 #define GAN_MAT_SUB_I2     gan_ltmat22f_sub_i2
02662 #define GAN_MAT_DECREMENT  gan_ltmat22f_decrement
02663 #define GAN_MAT_SUB_S      gan_ltmat22f_sub_s
02664 #define GAN_MAT_MULTV_Q    gan_ltmat22f_multv2_q
02665 #define GAN_MAT_MULTV_S    gan_ltmat22f_multv2_s
02666 #define GAN_MAT_MULTV_I    gan_ltmat22f_multv2_i
02667 #define GAN_MATT_MULTV_Q   gan_ltmat22Tf_multv2_q
02668 #define GAN_MATT_MULTV_S   gan_ltmat22Tf_multv2_s
02669 #define GAN_MATT_MULTV_I   gan_ltmat22Tf_multv2_i
02670 #define GAN_MAT_SRMULTT_Q  gan_ltmat22f_srmultT_q
02671 #define GAN_MAT_SRMULTT_S  gan_ltmat22f_srmultT_s
02672 #define GAN_MAT_SRMULTT_I  gan_ltmat22f_srmultT_i
02673 #define GAN_MAT_SLMULTT_Q  gan_ltmat22f_slmultT_q
02674 #define GAN_MAT_SLMULTT_S  gan_ltmat22f_slmultT_s
02675 #define GAN_MAT_SLMULTT_I  gan_ltmat22f_slmultT_i
02676 #define GAN_MAT_SUMSQR_Q   gan_ltmat22f_sumsqr_q
02677 #define GAN_MAT_SUMSQR_S   gan_ltmat22f_sumsqr_s
02678 #define GAN_MAT_FNORM_Q    gan_ltmat22f_Fnorm_q
02679 #define GAN_MAT_FNORM_S    gan_ltmat22f_Fnorm_s
02680 
02681 #define GAN_SQUMAT_IDENT_Q    gan_ltmat22f_ident_q
02682 #define GAN_SQUMAT_IDENT_S    gan_ltmat22f_ident_s
02683 #define GAN_SQUMATI_MULTV_Q   gan_ltmat22If_multv2_q
02684 #define GAN_SQUMATI_MULTV_S   gan_ltmat22If_multv2_s
02685 #define GAN_SQUMATI_MULTV_I   gan_ltmat22If_multv2_i
02686 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat22ITf_multv2_q
02687 #define GAN_SQUMATIT_MULTV_S  gan_ltmat22ITf_multv2_s
02688 #define GAN_SQUMATIT_MULTV_I  gan_ltmat22ITf_multv2_i
02689 #define GAN_SQUMAT_INVERT     gan_ltmat22f_invert
02690 #define GAN_SQUMAT_INVERT_Q   gan_ltmat22f_invert_q
02691 #define GAN_SQUMAT_INVERT_S   gan_ltmat22f_invert_s
02692 #define GAN_SQUMAT_INVERT_I   gan_ltmat22f_invert_i
02693 #define GAN_SQUMAT_DET_Q      gan_ltmat22f_det_q
02694 #define GAN_SQUMAT_DET_S      gan_ltmat22f_det_s
02695 #define GAN_SQUMAT_TRACE_Q    gan_ltmat22f_trace_q
02696 #define GAN_SQUMAT_TRACE_S    gan_ltmat22f_trace_s
02697 
02698 #ifndef _GAN_2X2LTMATF_H
02699 #define _GAN_2X2LTMATF_H
02700 
02701 
02702 #endif /* #ifndef _GAN_2X2LTMATF_H */
02703 
02716 /* This library is free software; you can redistribute it and/or
02717    modify it under the terms of the GNU Lesser General Public
02718    License as published by the Free Software Foundation; either
02719    version 2.1 of the License, or (at your option) any later version.
02720 
02721    This library is distributed in the hope that it will be useful,
02722    but WITHOUT ANY WARRANTY; without even the implied warranty of
02723    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02724    Lesser General Public License for more details.
02725 
02726    You should have received a copy of the GNU Lesser General Public
02727    License along with this library; if not, write to the Free Software
02728    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02729 */
02730 
02731 /* function declarations for functions common to all small square matrix
02732  * types */
02733 
02734 
02735 
02736 /* documentation for macros defined in individual header files */
02737 
02750  Gan_SquMatrix22_f *gan_ltmat22f_ident_q ( Gan_SquMatrix22_f *A );
02751 
02789  Gan_Vector2_f *gan_ltmat22If_multv2_q ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
02790                                     Gan_Vector2_f *q );
02791 
02800  Gan_Vector2_f *gan_ltmat22If_multv2_i ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
02801 
02810  Gan_Vector2_f *gan_ltmat22ITf_multv2_q ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
02811                                      Gan_Vector2_f *q );
02812 
02821  Gan_Vector2_f *gan_ltmat22ITf_multv2_i ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
02822 
02840  Gan_SquMatrix22_f *gan_ltmat22f_invert_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02841 
02850  Gan_SquMatrix22_f *gan_ltmat22f_invert_i ( Gan_SquMatrix22_f *A );
02851 
02866  float gan_ltmat22f_det_q ( const Gan_SquMatrix22_f *A );
02867 
02873  float gan_ltmat22f_trace_q ( const Gan_SquMatrix22_f *A );
02874 
02880 #undef GAN_SQUMAT_IDENT_Q
02881 #undef GAN_SQUMAT_IDENT_S
02882 #undef GAN_SQUMAT_TPOSE_Q
02883 #undef GAN_SQUMAT_TPOSE_S
02884 #undef GAN_SQUMAT_TPOSE_I
02885 #undef GAN_MAT_SADDT_Q
02886 #undef GAN_MAT_SADDT_S
02887 #undef GAN_SQUMATI_MULTV_Q
02888 #undef GAN_SQUMATI_MULTV_S
02889 #undef GAN_SQUMATI_MULTV_I
02890 #undef GAN_SQUMATIT_MULTV_Q
02891 #undef GAN_SQUMATIT_MULTV_S
02892 #undef GAN_SQUMATIT_MULTV_I
02893 #undef GAN_SQUMAT_INVERT
02894 #undef GAN_SQUMAT_INVERT_Q
02895 #undef GAN_SQUMAT_INVERT_S
02896 #undef GAN_SQUMAT_INVERT_I
02897 #undef GAN_SQUMAT_ADJOINT_Q
02898 #undef GAN_SQUMAT_ADJOINT_S
02899 #undef GAN_SQUMAT_ADJOINTT_Q
02900 #undef GAN_SQUMAT_ADJOINTT_S
02901 #undef GAN_SQUMAT_DET_Q
02902 #undef GAN_SQUMAT_DET_S
02903 #undef GAN_SQUMAT_TRACE_Q
02904 #undef GAN_SQUMAT_TRACE_S
02905 
02918 /* This library is free software; you can redistribute it and/or
02919    modify it under the terms of the GNU Lesser General Public
02920    License as published by the Free Software Foundation; either
02921    version 2.1 of the License, or (at your option) any later version.
02922 
02923    This library is distributed in the hope that it will be useful,
02924    but WITHOUT ANY WARRANTY; without even the implied warranty of
02925    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02926    Lesser General Public License for more details.
02927 
02928    You should have received a copy of the GNU Lesser General Public
02929    License along with this library; if not, write to the Free Software
02930    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02931 */
02932 
02933 /* function declarations for functions common to all small vector types */
02934 
02935 
02936 
02937 /* documentation for macros defined in individual header files */
02938 
02949  Gan_SquMatrix22_f *gan_ltmat22f_zero_q ( const Gan_SquMatrix22_f *A );
02950 
02967  Gan_SquMatrix22_f *gan_ltmat22f_copy_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
02968 
02986  Gan_SquMatrix22_f *gan_ltmat22f_scale_q ( Gan_SquMatrix22_f *A, float a,
02987                                Gan_SquMatrix22_f *B );
02988 
02996  Gan_SquMatrix22_f *gan_ltmat22f_scale_i ( Gan_SquMatrix22_f *A, float a );
02997 
03006  Gan_SquMatrix22_f *gan_ltmat22f_divide_q ( Gan_SquMatrix22_f *A, float a,
03007                                 Gan_SquMatrix22_f *B );
03008 
03016  Gan_SquMatrix22_f *gan_ltmat22f_divide_i ( Gan_SquMatrix22_f *A, float a );
03017 
03025  Gan_SquMatrix22_f *gan_ltmat22f_negate_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03026 
03034  Gan_SquMatrix22_f *gan_ltmat22f_negate_i ( Gan_SquMatrix22_f *A );
03035 
03043  Gan_SquMatrix22_f *gan_ltmat22f_unit_i ( Gan_SquMatrix22_f *A );
03044 
03062  Gan_SquMatrix22_f *gan_ltmat22f_add_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
03063 
03072  Gan_SquMatrix22_f *gan_ltmat22f_add_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03073 
03082  Gan_SquMatrix22_f *gan_ltmat22f_add_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03083 
03092  Gan_SquMatrix22_f *gan_ltmat22f_increment ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03093 
03111  Gan_SquMatrix22_f *gan_ltmat22f_sub_q ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B, Gan_SquMatrix22_f *C );
03112 
03121  Gan_SquMatrix22_f *gan_ltmat22f_sub_i1 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03122 
03131  Gan_SquMatrix22_f *gan_ltmat22f_sub_i2 ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03132 
03141  Gan_SquMatrix22_f *gan_ltmat22f_decrement ( Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03142 
03161  Gan_Vector2_f *gan_ltmat22f_multv2_q ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
03162                                 Gan_Vector2_f *q );
03163 
03172  Gan_Vector2_f *gan_ltmat22f_multv2_i ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
03173 
03182  Gan_Vector2_f *gan_ltmat22Tf_multv2_q ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p,
03183                                  Gan_Vector2_f *q );
03184 
03193  Gan_Vector2_f *gan_ltmat22Tf_multv2_i ( const Gan_SquMatrix22_f *A, Gan_Vector2_f *p );
03194 
03256  Gan_SquMatrix22_f *gan_ltmat22f_slmultT_q ( Gan_SquMatrix22_f *A, const Gan_SquMatrix22_f *B );
03257 
03267  Gan_SquMatrix22_f *gan_ltmat22f_slmultT_i ( Gan_SquMatrix22_f *A );
03268 
03277  Gan_SquMatrix22_f *gan_ltmat22f_srmultT_q ( const Gan_SquMatrix22_f *A, Gan_SquMatrix22_f *B );
03278 
03288  Gan_SquMatrix22_f *gan_ltmat22f_srmultT_i ( Gan_SquMatrix22_f *A );
03289 
03304  float gan_ltmat22f_sumsqr_q ( const Gan_SquMatrix22_f *A );
03305 
03312  float gan_ltmat22f_Fnorm_q ( const Gan_SquMatrix22_f *A );
03313 
03344 /* This library is free software; you can redistribute it and/or
03345    modify it under the terms of the GNU Lesser General Public
03346    License as published by the Free Software Foundation; either
03347    version 2.1 of the License, or (at your option) any later version.
03348 
03349    This library is distributed in the hope that it will be useful,
03350    but WITHOUT ANY WARRANTY; without even the implied warranty of
03351    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03352    Lesser General Public License for more details.
03353 
03354    You should have received a copy of the GNU Lesser General Public
03355    License along with this library; if not, write to the Free Software
03356    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03357 */
03358 
03359 #undef GAN_MATTYPE
03360 #undef GAN_MATRIX_TYPE
03361 #undef GAN_SQUMATRIX_TYPE
03362 #undef GAN_VECTOR_TYPE
03363 #undef GAN_MAT_ELEMENT_TYPE
03364 #undef GAN_REALTYPE
03365 #undef GAN_FWRITE_LENDIAN
03366 #undef GAN_FREAD_LENDIAN
03367 #undef GAN_VECTYPE1
03368 #undef GAN_VECTYPE2
03369 #undef GAN_MATTYPEL
03370 #undef GAN_MATTYPER
03371 #undef GAN_SQUMATTYPEL
03372 #undef GAN_SQUMATTYPER
03373 #undef GAN_FIXED_MATRIX_TYPE
03374 #undef GAN_MAT_FPRINT
03375 #undef GAN_MAT_PRINT
03376 #undef GAN_MAT_FSCANF
03377 #undef GAN_MAT_FWRITE
03378 #undef GAN_MAT_FREAD
03379 #undef GAN_MAT_ZERO_Q
03380 #undef GAN_MAT_ZERO_S
03381 #undef GAN_MAT_COPY_Q
03382 #undef GAN_MAT_COPY_S
03383 #undef GAN_MAT_SCALE_Q
03384 #undef GAN_MAT_SCALE_S
03385 #undef GAN_MAT_SCALE_I
03386 #undef GAN_MAT_DIVIDE_Q
03387 #undef GAN_MAT_DIVIDE_S
03388 #undef GAN_MAT_DIVIDE_I
03389 #undef GAN_MAT_NEGATE_Q
03390 #undef GAN_MAT_NEGATE_S
03391 #undef GAN_MAT_NEGATE_I
03392 #undef GAN_MAT_UNIT_Q
03393 #undef GAN_MAT_UNIT_S
03394 #undef GAN_MAT_UNIT_I
03395 #undef GAN_MAT_ADD_Q
03396 #undef GAN_MAT_ADD_I1
03397 #undef GAN_MAT_ADD_I2
03398 #undef GAN_MAT_INCREMENT
03399 #undef GAN_MAT_ADD_S
03400 #undef GAN_MAT_SUB_Q
03401 #undef GAN_MAT_SUB_I1
03402 #undef GAN_MAT_SUB_I2
03403 #undef GAN_MAT_DECREMENT
03404 #undef GAN_MAT_SUB_S
03405 #undef GAN_VEC_OUTER_Q
03406 #undef GAN_VEC_OUTER_S
03407 #undef GAN_MAT_MULTV_Q
03408 #undef GAN_MAT_MULTV_S
03409 #undef GAN_MAT_MULTV_I
03410 #undef GAN_MATT_MULTV_Q
03411 #undef GAN_MATT_MULTV_S
03412 #undef GAN_MATT_MULTV_I
03413 #undef GAN_MAT_LMULTM_Q
03414 #undef GAN_MAT_LMULTM_S
03415 #undef GAN_MAT_LMULTMT_Q
03416 #undef GAN_MAT_LMULTMT_S
03417 #undef GAN_MAT_RMULTM_Q
03418 #undef GAN_MAT_RMULTM_S
03419 #undef GAN_MAT_RMULTMT_Q
03420 #undef GAN_MAT_RMULTMT_S
03421 #undef GAN_MAT_LMULTMT_SYM_Q
03422 #undef GAN_MAT_LMULTMT_SYM_S
03423 #undef GAN_MAT_RMULTMT_SYM_Q
03424 #undef GAN_MAT_RMULTMT_SYM_S
03425 #undef GAN_MAT_LMULTS_Q
03426 #undef GAN_MAT_LMULTS_S
03427 #undef GAN_MAT_RMULTS_Q
03428 #undef GAN_MAT_RMULTS_S
03429 #undef GAN_SYMMATL_LRMULT_Q
03430 #undef GAN_SYMMATL_LRMULT_S
03431 #undef GAN_SYMMATR_LRMULT_Q
03432 #undef GAN_SYMMATR_LRMULT_S
03433 #undef GAN_MAT_LMULTL_Q
03434 #undef GAN_MAT_LMULTL_S
03435 #undef GAN_MAT_LMULTL_I
03436 #undef GAN_MAT_LMULTLI_Q
03437 #undef GAN_MAT_LMULTLI_S
03438 #undef GAN_MAT_LMULTLI_I
03439 #undef GAN_MAT_LMULTLT_Q
03440 #undef GAN_MAT_LMULTLT_S
03441 #undef GAN_MAT_LMULTLT_I
03442 #undef GAN_MAT_LMULTLIT_Q
03443 #undef GAN_MAT_LMULTLIT_S
03444 #undef GAN_MAT_LMULTLIT_I
03445 #undef GAN_MAT_RMULTL_Q
03446 #undef GAN_MAT_RMULTL_S
03447 #undef GAN_MAT_RMULTL_I
03448 #undef GAN_MAT_RMULTLI_Q
03449 #undef GAN_MAT_RMULTLI_S
03450 #undef GAN_MAT_RMULTLI_I
03451 #undef GAN_MAT_RMULTLT_Q
03452 #undef GAN_MAT_RMULTLT_S
03453 #undef GAN_MAT_RMULTLT_I
03454 #undef GAN_MAT_RMULTLIT_Q
03455 #undef GAN_MAT_RMULTLIT_S
03456 #undef GAN_MAT_RMULTLIT_I
03457 #undef GAN_MAT_SRMULTT_Q
03458 #undef GAN_MAT_SRMULTT_S
03459 #undef GAN_MAT_SRMULTT_I
03460 #undef GAN_MAT_SLMULTT_Q
03461 #undef GAN_MAT_SLMULTT_S
03462 #undef GAN_MAT_SLMULTT_I
03463 #undef GAN_MAT_RMULTLIT_S
03464 #undef GAN_MAT_SUMSQR_Q
03465 #undef GAN_MAT_SUMSQR_S
03466 #undef GAN_MAT_FNORM_Q
03467 #undef GAN_MAT_FNORM_S
03468 #undef GAN_MAT_FROM_MAT_Q
03469 #undef GAN_MAT_FROM_MAT_S
03470 #undef GAN_MAT_FROM_SQUMAT_Q
03471 #undef GAN_MAT_FROM_SQUMAT_S
03472 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03473 #undef GAN_SQUMAT_FROM_SQUMAT_S
03474 
03475 /* declare functions specific to upper triangular 2x2 matrices */
03489 #define GAN_MATTYPE Gan_SquMatrix22_f
03490 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03491 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03492 #define GAN_VECTOR_TYPE Gan_Vector_f
03493 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03494 #define GAN_REALTYPE float
03495 #define GAN_MAT_FPRINT   gan_ltmat22Tf_fprint
03496 #define GAN_MAT_PRINT    gan_ltmat22Tf_print
03497 #define GAN_MAT_FSCANF   gan_ltmat22Tf_fscanf
03498 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX22_F
03499 
03500 #define gan_ltmat22Tf_fwrite gan_ltmat22f_fwrite
03501 #define gan_ltmat22Tf_fread  gan_ltmat22f_fread
03502 
03515 /* This library is free software; you can redistribute it and/or
03516    modify it under the terms of the GNU Lesser General Public
03517    License as published by the Free Software Foundation; either
03518    version 2.1 of the License, or (at your option) any later version.
03519 
03520    This library is distributed in the hope that it will be useful,
03521    but WITHOUT ANY WARRANTY; without even the implied warranty of
03522    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03523    Lesser General Public License for more details.
03524 
03525    You should have received a copy of the GNU Lesser General Public
03526    License along with this library; if not, write to the Free Software
03527    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03528 */
03529 
03530 /* function declarations for functions common to all small square matrix
03531  * types */
03532 
03533 
03534 
03535 /* documentation for macros defined in individual header files */
03536 
03603 #undef GAN_SQUMAT_IDENT_Q
03604 #undef GAN_SQUMAT_IDENT_S
03605 #undef GAN_SQUMAT_TPOSE_Q
03606 #undef GAN_SQUMAT_TPOSE_S
03607 #undef GAN_SQUMAT_TPOSE_I
03608 #undef GAN_MAT_SADDT_Q
03609 #undef GAN_MAT_SADDT_S
03610 #undef GAN_SQUMATI_MULTV_Q
03611 #undef GAN_SQUMATI_MULTV_S
03612 #undef GAN_SQUMATI_MULTV_I
03613 #undef GAN_SQUMATIT_MULTV_Q
03614 #undef GAN_SQUMATIT_MULTV_S
03615 #undef GAN_SQUMATIT_MULTV_I
03616 #undef GAN_SQUMAT_INVERT
03617 #undef GAN_SQUMAT_INVERT_Q
03618 #undef GAN_SQUMAT_INVERT_S
03619 #undef GAN_SQUMAT_INVERT_I
03620 #undef GAN_SQUMAT_ADJOINT_Q
03621 #undef GAN_SQUMAT_ADJOINT_S
03622 #undef GAN_SQUMAT_ADJOINTT_Q
03623 #undef GAN_SQUMAT_ADJOINTT_S
03624 #undef GAN_SQUMAT_DET_Q
03625 #undef GAN_SQUMAT_DET_S
03626 #undef GAN_SQUMAT_TRACE_Q
03627 #undef GAN_SQUMAT_TRACE_S
03628 
03641 /* This library is free software; you can redistribute it and/or
03642    modify it under the terms of the GNU Lesser General Public
03643    License as published by the Free Software Foundation; either
03644    version 2.1 of the License, or (at your option) any later version.
03645 
03646    This library is distributed in the hope that it will be useful,
03647    but WITHOUT ANY WARRANTY; without even the implied warranty of
03648    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03649    Lesser General Public License for more details.
03650 
03651    You should have received a copy of the GNU Lesser General Public
03652    License along with this library; if not, write to the Free Software
03653    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03654 */
03655 
03656 /* function declarations for functions common to all small vector types */
03657 
03658 
03659 
03660 /* documentation for macros defined in individual header files */
03661 
03832 /* This library is free software; you can redistribute it and/or
03833    modify it under the terms of the GNU Lesser General Public
03834    License as published by the Free Software Foundation; either
03835    version 2.1 of the License, or (at your option) any later version.
03836 
03837    This library is distributed in the hope that it will be useful,
03838    but WITHOUT ANY WARRANTY; without even the implied warranty of
03839    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03840    Lesser General Public License for more details.
03841 
03842    You should have received a copy of the GNU Lesser General Public
03843    License along with this library; if not, write to the Free Software
03844    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03845 */
03846 
03847 #undef GAN_MATTYPE
03848 #undef GAN_MATRIX_TYPE
03849 #undef GAN_SQUMATRIX_TYPE
03850 #undef GAN_VECTOR_TYPE
03851 #undef GAN_MAT_ELEMENT_TYPE
03852 #undef GAN_REALTYPE
03853 #undef GAN_FWRITE_LENDIAN
03854 #undef GAN_FREAD_LENDIAN
03855 #undef GAN_VECTYPE1
03856 #undef GAN_VECTYPE2
03857 #undef GAN_MATTYPEL
03858 #undef GAN_MATTYPER
03859 #undef GAN_SQUMATTYPEL
03860 #undef GAN_SQUMATTYPER
03861 #undef GAN_FIXED_MATRIX_TYPE
03862 #undef GAN_MAT_FPRINT
03863 #undef GAN_MAT_PRINT
03864 #undef GAN_MAT_FSCANF
03865 #undef GAN_MAT_FWRITE
03866 #undef GAN_MAT_FREAD
03867 #undef GAN_MAT_ZERO_Q
03868 #undef GAN_MAT_ZERO_S
03869 #undef GAN_MAT_COPY_Q
03870 #undef GAN_MAT_COPY_S
03871 #undef GAN_MAT_SCALE_Q
03872 #undef GAN_MAT_SCALE_S
03873 #undef GAN_MAT_SCALE_I
03874 #undef GAN_MAT_DIVIDE_Q
03875 #undef GAN_MAT_DIVIDE_S
03876 #undef GAN_MAT_DIVIDE_I
03877 #undef GAN_MAT_NEGATE_Q
03878 #undef GAN_MAT_NEGATE_S
03879 #undef GAN_MAT_NEGATE_I
03880 #undef GAN_MAT_UNIT_Q
03881 #undef GAN_MAT_UNIT_S
03882 #undef GAN_MAT_UNIT_I
03883 #undef GAN_MAT_ADD_Q
03884 #undef GAN_MAT_ADD_I1
03885 #undef GAN_MAT_ADD_I2
03886 #undef GAN_MAT_INCREMENT
03887 #undef GAN_MAT_ADD_S
03888 #undef GAN_MAT_SUB_Q
03889 #undef GAN_MAT_SUB_I1
03890 #undef GAN_MAT_SUB_I2
03891 #undef GAN_MAT_DECREMENT
03892 #undef GAN_MAT_SUB_S
03893 #undef GAN_VEC_OUTER_Q
03894 #undef GAN_VEC_OUTER_S
03895 #undef GAN_MAT_MULTV_Q
03896 #undef GAN_MAT_MULTV_S
03897 #undef GAN_MAT_MULTV_I
03898 #undef GAN_MATT_MULTV_Q
03899 #undef GAN_MATT_MULTV_S
03900 #undef GAN_MATT_MULTV_I
03901 #undef GAN_MAT_LMULTM_Q
03902 #undef GAN_MAT_LMULTM_S
03903 #undef GAN_MAT_LMULTMT_Q
03904 #undef GAN_MAT_LMULTMT_S
03905 #undef GAN_MAT_RMULTM_Q
03906 #undef GAN_MAT_RMULTM_S
03907 #undef GAN_MAT_RMULTMT_Q
03908 #undef GAN_MAT_RMULTMT_S
03909 #undef GAN_MAT_LMULTMT_SYM_Q
03910 #undef GAN_MAT_LMULTMT_SYM_S
03911 #undef GAN_MAT_RMULTMT_SYM_Q
03912 #undef GAN_MAT_RMULTMT_SYM_S
03913 #undef GAN_MAT_LMULTS_Q
03914 #undef GAN_MAT_LMULTS_S
03915 #undef GAN_MAT_RMULTS_Q
03916 #undef GAN_MAT_RMULTS_S
03917 #undef GAN_SYMMATL_LRMULT_Q
03918 #undef GAN_SYMMATL_LRMULT_S
03919 #undef GAN_SYMMATR_LRMULT_Q
03920 #undef GAN_SYMMATR_LRMULT_S
03921 #undef GAN_MAT_LMULTL_Q
03922 #undef GAN_MAT_LMULTL_S
03923 #undef GAN_MAT_LMULTL_I
03924 #undef GAN_MAT_LMULTLI_Q
03925 #undef GAN_MAT_LMULTLI_S
03926 #undef GAN_MAT_LMULTLI_I
03927 #undef GAN_MAT_LMULTLT_Q
03928 #undef GAN_MAT_LMULTLT_S
03929 #undef GAN_MAT_LMULTLT_I
03930 #undef GAN_MAT_LMULTLIT_Q
03931 #undef GAN_MAT_LMULTLIT_S
03932 #undef GAN_MAT_LMULTLIT_I
03933 #undef GAN_MAT_RMULTL_Q
03934 #undef GAN_MAT_RMULTL_S
03935 #undef GAN_MAT_RMULTL_I
03936 #undef GAN_MAT_RMULTLI_Q
03937 #undef GAN_MAT_RMULTLI_S
03938 #undef GAN_MAT_RMULTLI_I
03939 #undef GAN_MAT_RMULTLT_Q
03940 #undef GAN_MAT_RMULTLT_S
03941 #undef GAN_MAT_RMULTLT_I
03942 #undef GAN_MAT_RMULTLIT_Q
03943 #undef GAN_MAT_RMULTLIT_S
03944 #undef GAN_MAT_RMULTLIT_I
03945 #undef GAN_MAT_SRMULTT_Q
03946 #undef GAN_MAT_SRMULTT_S
03947 #undef GAN_MAT_SRMULTT_I
03948 #undef GAN_MAT_SLMULTT_Q
03949 #undef GAN_MAT_SLMULTT_S
03950 #undef GAN_MAT_SLMULTT_I
03951 #undef GAN_MAT_RMULTLIT_S
03952 #undef GAN_MAT_SUMSQR_Q
03953 #undef GAN_MAT_SUMSQR_S
03954 #undef GAN_MAT_FNORM_Q
03955 #undef GAN_MAT_FNORM_S
03956 #undef GAN_MAT_FROM_MAT_Q
03957 #undef GAN_MAT_FROM_MAT_S
03958 #undef GAN_MAT_FROM_SQUMAT_Q
03959 #undef GAN_MAT_FROM_SQUMAT_S
03960 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03961 #undef GAN_SQUMAT_FROM_SQUMAT_S
03962 
03975 #ifdef __cplusplus
03976 }
03977 #endif
03978 
03979 #endif /* #ifndef _GAN_2X2MATRIXF_H */

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