00001 #ifndef __SPLI_H 00002 #define __SPLI_H 00003 00004 /**********************************************************/ 00005 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00006 /* 00007 Copyright: 1994 - Grupo de Voz (DAET) ETSII/IT-Bilbao 00008 00009 Nombre fuente................ SPLI.H 00010 Nombre paquete............... SPL 00011 Lenguaje fuente.............. C (Borland C/C++ 3.1) 00012 Estado....................... Completado 00013 Dependencia Hard/OS.......... - 00014 Codigo condicional........... - 00015 00016 Codificacion................. Borja Etxebarria 00017 00018 Version dd/mm/aa Autor Proposito de la edicion 00019 ------- -------- -------- ----------------------- 00020 1.1.1 30/07/95 Borja scope funciones explicito 00021 1.1.0 08/12/94 Borja revision general (tipos,idx,nel,tnel...) 00022 1.0.0 06/07/93 Borja Codificacion inicial. 00023 00024 ======================== Contenido ======================== 00025 Definiciones y macros de uso interno comun a todos los 00026 modulos SPL. 00027 00028 Si NDEBUG NO esta definido, todos los chequeos assert() se activan, 00029 reduciendo un poco la velocidad de las funciones ya que se chequea 00030 la validez de los parametros, pero es mas seguro en fase de 00031 desarrollo. Si se pasa algun parametro mal, el programa casca, 00032 informando del fichero fuente y de la linea en la que se detecto 00033 la anomalia. 00034 00035 Si NDEBUG SI se define, los chequeos se desconectan. Si se envian 00036 a las funciones SPL valores fuera de los rangos indicados, no 00037 funcionaran correctamente (resultados indefinidos, escritura fuera 00038 de vectores... 00039 00040 El define NDEBUG es C estandar (assert.h), y puede haber otros modulos 00041 que lo utilicen. Si se define globalmente, afectara a todos ellos y no 00042 solo a los modulos SPL?.C 00043 =========================================================== 00044 */ 00045 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00046 /**********************************************************/ 00047 00048 #include <stdlib.h> 00049 #include <math.h> 00050 #include <assert.h> 00051 00052 #include "spl.h" 00053 00054 /**********************************************************/ 00055 /* suma en {k}, desde {from} hasta {to}, la expresion {expr} acumulando 00056 el sumatorio en {sum}, que se inicializa a {isum} */ 00057 00058 #define __sum(k,from,to,expr,sum,isum) { \ 00059 (sum) = (isum); \ 00060 for ((k)=(from); (k)<=(to); (k)++) \ 00061 (sum) += (expr); \ 00062 } 00063 00064 /**********************************************************/ 00065 /* suma en {k}, desde {from} hasta el elemento anterior a {upto}, la 00066 expresion {expr} acumulando el resultado en {sum}, que se inicializa 00067 a {isum} */ 00068 00069 #define __xsum(k,from,upto,expr,sum,isum) { \ 00070 (sum) = (isum); \ 00071 for ((k)=(from); (k)<(upto); (k)++) \ 00072 (sum) += (expr); \ 00073 } 00074 00075 /**********************************************************/ 00076 /* resta en {k}, desde from hasta {to}, la expresion {expr} acumulando 00077 el sumatorio en {sub}, que se inicializa a {isub} */ 00078 00079 #define __sub(k,from,to,expr,sub,isub) { \ 00080 (sub) = (isub); \ 00081 for ((k)=(from); (k)<=(to); (k)++) \ 00082 (sub) -= (expr); \ 00083 } 00084 00085 /**********************************************************/ 00086 /* resta en {k}, desde {from} hasta el elemento anterior a {upto}, la 00087 expresion {expr} acumulando el resultado en {sub}, que se inicializa 00088 a {isub} */ 00089 00090 #define __xsub(k,from,upto,expr,sub,isub) { \ 00091 (sub) = (isub); \ 00092 for ((k)=(from); (k)<(upto); (k)++) \ 00093 (sub) -= (expr); \ 00094 } 00095 00096 /**********************************************************/ 00097 /* intercambia {a} y {b}. {tmp} es una variable temporal 00098 del mismo tipo que {a} y {b} */ 00099 00100 #define __swap(a,b,tmp) { (tmp)=(a); (a)=(b); (b)=(tmp); } 00101 00102 /**********************************************************/ 00103 00104 #endif 00105