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

4vector.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_4VECTOR_H
00030 #define _GAN_4VECTOR_H
00031 
00032 #include <stdlib.h>
00033 #include <stdio.h>
00034 #include <gandalf/common/misc_defs.h>
00048 /* This library is free software; you can redistribute it and/or
00049    modify it under the terms of the GNU Lesser General Public
00050    License as published by the Free Software Foundation; either
00051    version 2.1 of the License, or (at your option) any later version.
00052 
00053    This library is distributed in the hope that it will be useful,
00054    but WITHOUT ANY WARRANTY; without even the implied warranty of
00055    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00056    Lesser General Public License for more details.
00057 
00058    You should have received a copy of the GNU Lesser General Public
00059    License along with this library; if not, write to the Free Software
00060    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00061 */
00062 
00063 #ifndef _GAN_REPEAT4_H
00064 #define _GAN_REPEAT4_H
00065 
00066 #ifdef __cplusplus
00067 extern "C" {
00068 #endif
00069 
00070 /* macros for constructing four-fold repetitions */
00071 #define GAN_REP4_AS(a,b,p1,p2,p3,p4) (a p1 b, a p2 b, a p3 b, a p4 b)
00072 #define GAN_REP4_AS_C(a,b) GAN_REP4_AS(a,b,x,y,z,w)
00073 #define GAN_REP4_A(a,p1,p2,p3,p4) (a p1, a p2, a p3, a p4)
00074 #define GAN_REP4_A_C(a) GAN_REP4_A(a,x,y,z,w)
00075 
00076 #define GAN_FREP4_A(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00077     (a p1 b q1, a p2 b q2,\
00078      a p3 b q3, a p4 b q4)
00079 #define GAN_FREP4_A_C(a,b,p1,p2,p3,p4) GAN_FREP4_A(a,b,x,y,z,w,p1,p2,p3,p4)
00080 
00081 #define GAN_REP4_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00082            (a p1 b q1 c, a p2 b q2 c, a p3 b q3 c, a p4 b q4 c)
00083 #define GAN_REP4_AAS(a,b,c,p1,p2,p3,p4)\
00084            GAN_REP4_ABS(a,b,c,p1,p2,p3,p4,p1,p2,p3,p4)
00085 #define GAN_REP4_AAS_C(a,b,c) GAN_REP4_AAS(a,b,c,x,y,z,w)
00086 
00087 #define GAN_REP4_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00088            (a p1 b q1, a p2 b q2, a p3 b q3, a p4 b q4)
00089 #define GAN_REP4_AA(a,b,p1,p2,p3,p4)\
00090            GAN_REP4_AB(a,b,p1,p2,p3,p4,p1,p2,p3,p4)
00091 #define GAN_REP4_AA_C(a,b) GAN_REP4_AA(a,b,x,y,z,w)
00092 
00093 #define GAN_REP4_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4)\
00094      (a p1 b q1 c r1 d, a p2 b q2 c r2 d, a p3 b q3 c r3 d, a p4 b q4 c r4 d)
00095 #define GAN_REP4_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4)\
00096      (a p1 b q1 c r1, a p2 b q2 c r2, a p3 b q3 c r3, a p4 b q4 c r4)
00097 #define GAN_REP4_AAA(a,b,c,p1,p2,p3,p4)\
00098            GAN_REP4_ABC(a,b,c,p1,p2,p3,p4,p1,p2,p3,p4,p1,p2,p3,p4)
00099 #define GAN_REP4_AAA_C(a,b,c) GAN_REP4_AAA(a,b,c,x,y,z,w)
00100 
00101 #define GAN_REP4_OP_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,op)\
00102         (a p1 b q1 op a p2 b q2 op a p3 b q3 op a p4 b q4)
00103 #define GAN_REP4_OP_AA(a,b,p1,p2,p3,p4,op)\
00104            GAN_REP4_OP_AB(a,b,p1,p2,p3,p4,p1,p2,p3,p4,op)
00105 #define GAN_REP4_OP_AA_C(a,b,op) GAN_REP4_OP_AA(a,b,x,y,z,w,op)
00106 
00107 #ifdef __cplusplus
00108 }
00109 #endif
00110 
00111 #endif /* #ifndef _GAN_REPEAT4_H */
00112 
00125 /* This library is free software; you can redistribute it and/or
00126    modify it under the terms of the GNU Lesser General Public
00127    License as published by the Free Software Foundation; either
00128    version 2.1 of the License, or (at your option) any later version.
00129 
00130    This library is distributed in the hope that it will be useful,
00131    but WITHOUT ANY WARRANTY; without even the implied warranty of
00132    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00133    Lesser General Public License for more details.
00134 
00135    You should have received a copy of the GNU Lesser General Public
00136    License along with this library; if not, write to the Free Software
00137    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00138 */
00139 
00140 #ifndef _GAN_MATVECF_MACROS_H
00141 #define _GAN_MATVECF_MACROS_H
00142 
00143 #ifdef __cplusplus
00144 extern "C" {
00145 #endif
00146 
00147 /* macros for testing the types of pointer arguments and then applying an
00148  * operation to them */
00149 #define GAN_TEST_OP1(A,typeA) assert(sizeof(*(A))==sizeof(typeA))
00150 #define GAN_TEST_OP2(A,B,typeA,typeB)\
00151   (assert(sizeof(*(A))==sizeof(typeA)&&sizeof(*(B))==sizeof(typeB)))
00152 #define GAN_TEST_OP3(A,B,C,typeA,typeB,typeC)\
00153   (assert(sizeof(*(A))==sizeof(typeA)&&sizeof(*(B))==sizeof(typeB)&&\
00154           sizeof(*(C))==sizeof(typeC)))
00155 #define GAN_TEST_OP4(A,B,C,D,typeA,typeB,typeC,typeD)\
00156   (assert(sizeof(*(A))==sizeof(typeA)&&sizeof(*(B))==sizeof(typeB)&&\
00157           sizeof(*(C))==sizeof(typeC)&&sizeof(*(D))==sizeof(typeD)))
00158 #define GAN_TEST_OP5(A,B,C,D,E,typeA,typeB,typeC,typeD,typeE)\
00159   (assert(sizeof(*(A))==sizeof(typeA)&&sizeof(*(B))==sizeof(typeB)&&\
00160           sizeof(*(C))==sizeof(typeC)&&sizeof(*(D))==sizeof(typeD)&&\
00161           sizeof(*(E))==sizeof(typeE)))
00162 
00163 #ifdef __cplusplus
00164 }
00165 #endif
00166 
00167 #endif /* #ifndef _GAN_MATVECF_MACROS_H */
00168 #include <gandalf/linalg/3vector.h>
00169 #include <gandalf/linalg/vec_gen.h>
00170 
00171 #ifdef __cplusplus
00172 extern "C" {
00173 #endif
00174 
00190 
00191 typedef struct Gan_Vector4
00192 {
00193    double x, y, z, w;
00194 } Gan_Vector4, Gan_Vector4_d;
00195 
00197 typedef struct Gan_Vector4_uc
00198 {
00199    unsigned char x, y, z, w;
00200 } Gan_Vector4_uc;
00201 
00203 typedef struct Gan_Vector4_i
00204 {
00205    int x, y, z, w;
00206 } Gan_Vector4_i;
00207 
00209 typedef struct Gan_Vector4_ui
00210 {
00211    unsigned int x, y, z, w;
00212 } Gan_Vector4_ui;
00213 
00215 #if (SIZEOF_DOUBLE == 8)
00216 typedef struct Gan_Vector4 Gan_Vector4_f64;
00217 #endif
00218 
00219 #if (SIZEOF_CHAR == 1)
00220 typedef struct Gan_Vector4_uc Gan_Vector4_ui8;
00221 #endif
00222 
00223 #if (SIZEOF_SHORT == 2)
00224 typedef struct Gan_Vector4_s  Gan_Vector4_i16;
00225 typedef struct Gan_Vector4_us Gan_Vector4_ui16;
00226 #endif
00227 
00228 #if (SIZEOF_INT == 4)
00229 typedef struct Gan_Vector4_i  Gan_Vector4_i32;
00230 typedef struct Gan_Vector4_ui Gan_Vector4_ui32;
00231 #endif
00232 
00233 /* declare functions specific to 4-vectors */
00247 /* This library is free software; you can redistribute it and/or
00248    modify it under the terms of the GNU Lesser General Public
00249    License as published by the Free Software Foundation; either
00250    version 2.1 of the License, or (at your option) any later version.
00251 
00252    This library is distributed in the hope that it will be useful,
00253    but WITHOUT ANY WARRANTY; without even the implied warranty of
00254    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00255    Lesser General Public License for more details.
00256 
00257    You should have received a copy of the GNU Lesser General Public
00258    License along with this library; if not, write to the Free Software
00259    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00260 */
00261 
00277  Gan_Vector4 *gan_vec4_fill_q ( Gan_Vector4 *p,
00278                                double X, double Y, double Z, double W );
00279 
00294  Gan_Vector3 *gan_vec4_get_v3t_q ( const Gan_Vector4 *p, Gan_Vector3 *q );
00295 
00317  Gan_Vector4 *gan_vec4_set_parts_q ( Gan_Vector4 *p, const Gan_Vector3 *q, double s );
00318 
00330  Gan_Vector4 *gan_vec4_set_blocks_q ( Gan_Vector4 *p,
00331                                      const Gan_Vector2 *q, const Gan_Vector2 *r );
00332 
00338 #define GAN_VECTYPE Gan_Vector4
00339 #define GAN_VECTOR_TYPE Gan_Vector
00340 #define GAN_VEC_ELEMENT_TYPE GAN_DOUBLE
00341 #define GAN_REALTYPE double
00342 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f64
00343 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f64
00344 #define GAN_VEC_FPRINT      gan_vec4_fprint
00345 #define GAN_VEC_PRINT       gan_vec4_print
00346 #define GAN_VEC_FSCANF      gan_vec4_fscanf
00347 #define GAN_VEC_FWRITE      gan_vec4_fwrite
00348 #define GAN_VEC_FREAD       gan_vec4_fread
00349 #define GAN_VEC_ZERO_Q      gan_vec4_zero_q
00350 #define GAN_VEC_ZERO_S      gan_vec4_zero_s
00351 #define GAN_VEC_COPY_Q      gan_vec4_copy_q
00352 #define GAN_VEC_COPY_S      gan_vec4_copy_s
00353 #define GAN_VEC_SCALE_Q     gan_vec4_scale_q
00354 #define GAN_VEC_SCALE_S     gan_vec4_scale_s
00355 #define GAN_VEC_SCALE_I     gan_vec4_scale_i
00356 #define GAN_VEC_DIVIDE_Q    gan_vec4_divide_q
00357 #define GAN_VEC_DIVIDE_S    gan_vec4_divide_s
00358 #define GAN_VEC_DIVIDE_I    gan_vec4_divide_i
00359 #define GAN_VEC_NEGATE_Q    gan_vec4_negate_q
00360 #define GAN_VEC_NEGATE_S    gan_vec4_negate_s
00361 #define GAN_VEC_NEGATE_I    gan_vec4_negate_i
00362 #define GAN_VEC_UNIT_Q      gan_vec4_unit_q
00363 #define GAN_VEC_UNIT_S      gan_vec4_unit_s
00364 #define GAN_VEC_UNIT_I      gan_vec4_unit_i
00365 #define GAN_VEC_ADD_Q       gan_vec4_add_q
00366 #define GAN_VEC_ADD_I1      gan_vec4_add_i1
00367 #define GAN_VEC_ADD_I2      gan_vec4_add_i2
00368 #define GAN_VEC_INCREMENT   gan_vec4_increment
00369 #define GAN_VEC_ADD_S       gan_vec4_add_s
00370 #define GAN_VEC_SUB_Q       gan_vec4_sub_q
00371 #define GAN_VEC_SUB_I1      gan_vec4_sub_i1
00372 #define GAN_VEC_SUB_I2      gan_vec4_sub_i2
00373 #define GAN_VEC_DECREMENT   gan_vec4_decrement
00374 #define GAN_VEC_SUB_S       gan_vec4_sub_s
00375 #define GAN_VEC_DOT_Q       gan_vec4_dot_q
00376 #define GAN_VEC_DOT_S       gan_vec4_dot_s
00377 #define GAN_VEC_SQRLEN_Q    gan_vec4_sqrlen_q
00378 #define GAN_VEC_SQRLEN_S    gan_vec4_sqrlen_s
00379 #define GAN_VEC_FROM_VEC_Q  gan_vec4_from_vec_q
00380 #define GAN_VEC_FROM_VEC_S  gan_vec4_from_vec_s
00381 
00395 /* This library is free software; you can redistribute it and/or
00396    modify it under the terms of the GNU Lesser General Public
00397    License as published by the Free Software Foundation; either
00398    version 2.1 of the License, or (at your option) any later version.
00399 
00400    This library is distributed in the hope that it will be useful,
00401    but WITHOUT ANY WARRANTY; without even the implied warranty of
00402    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00403    Lesser General Public License for more details.
00404 
00405    You should have received a copy of the GNU Lesser General Public
00406    License along with this library; if not, write to the Free Software
00407    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00408 */
00409 
00410 /* function declarations for functions common to all small vector types */
00411 
00412 
00413 /* documentation for macros defined in individual header files */
00414 
00425  Gan_Vector4 *gan_vec4_zero_q ( Gan_Vector4 *p );
00426 
00441  Gan_Vector4 *gan_vec4_copy_q ( Gan_Vector4 *p, Gan_Vector4 *q );
00442 
00458  Gan_Vector4 *gan_vec4_scale_q ( Gan_Vector4 *p, double a,
00459                                Gan_Vector4 *q );
00460 
00466  Gan_Vector4 *gan_vec4_scale_i ( Gan_Vector4 *p, double a );
00467 
00474  Gan_Vector4 *gan_vec4_divide_q ( Gan_Vector4 *p, double a,
00475                                 Gan_Vector4 *q );
00476 
00482  Gan_Vector4 *gan_vec4_divide_i ( Gan_Vector4 *p, double a );
00483 
00491  Gan_Vector4 *gan_vec4_negate_q ( Gan_Vector4 *p, Gan_Vector4 *q );
00492 
00500  Gan_Vector4 *gan_vec4_negate_i ( Gan_Vector4 *p );
00501 
00507  Gan_Vector4 *gan_vec4_unit_i ( Gan_Vector4 *p );
00508 
00526  Gan_Vector4 *gan_vec4_add_q ( Gan_Vector4 *p, Gan_Vector4 *q, Gan_Vector4 *r );
00527 
00536  Gan_Vector4 *gan_vec4_add_i1 ( Gan_Vector4 *p, Gan_Vector4 *q );
00537 
00546  Gan_Vector4 *gan_vec4_add_i2 ( Gan_Vector4 *p, Gan_Vector4 *q );
00547 
00556  Gan_Vector4 *gan_vec4_increment ( Gan_Vector4 *p, Gan_Vector4 *q );
00557 
00575  Gan_Vector4 *gan_vec4_sub_q ( Gan_Vector4 *p, Gan_Vector4 *q, Gan_Vector4 *r );
00576 
00585  Gan_Vector4 *gan_vec4_sub_i1 ( Gan_Vector4 *p, Gan_Vector4 *q );
00586 
00595  Gan_Vector4 *gan_vec4_sub_i2 ( Gan_Vector4 *p, Gan_Vector4 *q );
00596 
00605  Gan_Vector4 *gan_vec4_decrement ( Gan_Vector4 *p, Gan_Vector4 *q );
00606 
00622  double gan_vec4_dot_q ( const Gan_Vector4 *p, const Gan_Vector4 *q );
00623 
00641  double gan_vec4_sqrlen_q ( const Gan_Vector4 *p );
00642 
00652  Gan_Vector4 gan_vec4_from_vec_s ( const Gan_Vector *x );
00653 
00671 /* This library is free software; you can redistribute it and/or
00672    modify it under the terms of the GNU Lesser General Public
00673    License as published by the Free Software Foundation; either
00674    version 2.1 of the License, or (at your option) any later version.
00675 
00676    This library is distributed in the hope that it will be useful,
00677    but WITHOUT ANY WARRANTY; without even the implied warranty of
00678    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00679    Lesser General Public License for more details.
00680 
00681    You should have received a copy of the GNU Lesser General Public
00682    License along with this library; if not, write to the Free Software
00683    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00684 */
00685 
00686 #undef GAN_VECTYPE
00687 #undef GAN_VECTOR_TYPE
00688 #undef GAN_VEC_ELEMENT_TYPE
00689 #undef GAN_REALTYPE
00690 #undef GAN_FWRITE_LENDIAN
00691 #undef GAN_FREAD_LENDIAN
00692 #undef GAN_VEC_FPRINT
00693 #undef GAN_VEC_PRINT
00694 #undef GAN_VEC_FSCANF
00695 #undef GAN_VEC_FWRITE
00696 #undef GAN_VEC_FREAD
00697 #undef GAN_VEC_ZERO_Q
00698 #undef GAN_VEC_ZERO_S
00699 #undef GAN_VEC_COPY_Q
00700 #undef GAN_VEC_COPY_S
00701 #undef GAN_VEC_SCALE_Q
00702 #undef GAN_VEC_SCALE_S
00703 #undef GAN_VEC_SCALE_I
00704 #undef GAN_VEC_DIVIDE_Q
00705 #undef GAN_VEC_DIVIDE_S
00706 #undef GAN_VEC_DIVIDE_I
00707 #undef GAN_VEC_NEGATE_Q
00708 #undef GAN_VEC_NEGATE_S
00709 #undef GAN_VEC_NEGATE_I
00710 #undef GAN_VEC_UNIT_Q
00711 #undef GAN_VEC_UNIT_S
00712 #undef GAN_VEC_UNIT_I
00713 #undef GAN_VEC_ADD_Q
00714 #undef GAN_VEC_ADD_I1
00715 #undef GAN_VEC_ADD_I2
00716 #undef GAN_VEC_INCREMENT
00717 #undef GAN_VEC_ADD_S
00718 #undef GAN_VEC_SUB_Q
00719 #undef GAN_VEC_SUB_I1
00720 #undef GAN_VEC_SUB_I2
00721 #undef GAN_VEC_DECREMENT
00722 #undef GAN_VEC_SUB_S
00723 #undef GAN_VEC_DOT_Q
00724 #undef GAN_VEC_DOT_S
00725 #undef GAN_VEC_SQRLEN_Q
00726 #undef GAN_VEC_SQRLEN_S
00727 #undef GAN_VEC_FROM_VEC_Q
00728 #undef GAN_VEC_FROM_VEC_S
00729 
00742 #ifdef __cplusplus
00743 }
00744 #endif
00745 
00746 #endif /* #ifndef _GAN_4VECTOR_H */

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