Annotation of ADD_ver_10/Matrices.c, revision 1.2
1.1 rico 1: /******************************************************************************/
2: /* MÓDULO: Matrices.c */
3: /* */
4: /* Este módulo contiene las funciones de manejo de las matrices de */
5: /* dependencias de datos. */
6: /******************************************************************************/
7: /* Fecha: 16 de septiembre de 2005 */
8: /******************************************************************************/
9:
10: #include <stdio.h>
11: #include <stdlib.h>
12:
13: #include "defines.h"
14: #include "tipos.h"
15:
16: #include "matrices.h"
17:
18: /* configuracion */
19: extern struct argumentos configuracion;
20:
21: /* análisis de dependencias de datos */
22: extern struct punterosD matriz;
23:
24:
25:
26: /* inicia a NULL todos los punteros de las matrices */
27:
28: void IniciarPunterosMatrices()
29: {
1.2 ! rico 30: matriz.Ddatoexp = NULL;
! 31: matriz.Ddir_exp = NULL;
! 32: matriz.Dpilaexp = NULL;
! 33: matriz.Destadoexp = NULL;
! 34: matriz.Ddatoimp = NULL;
! 35: matriz.Ddir_imp = NULL;
! 36: matriz.Dpilaimp = NULL;
! 37: matriz.Destadoimp = NULL;
! 38:
! 39: matriz.ADdatoexp = NULL;
! 40: matriz.ADdir_exp = NULL;
! 41: matriz.ADpilaexp = NULL;
! 42: matriz.ADestadoexp = NULL;
! 43: matriz.ADdatoimp = NULL;
! 44: matriz.ADdir_imp = NULL;
! 45: matriz.ADpilaimp = NULL;
! 46: matriz.ADestadoimp = NULL;
! 47:
! 48: matriz.Sdatoexp = NULL;
! 49: matriz.Sdir_exp = NULL;
! 50: matriz.Spilaexp = NULL;
! 51: matriz.Sestadoexp = NULL;
! 52: matriz.Sdatoimp = NULL;
! 53: matriz.Sdir_imp = NULL;
! 54: matriz.Spilaimp = NULL;
! 55: matriz.Sestadoimp = NULL;
1.1 rico 56:
1.2 ! rico 57: matriz.D = NULL;
1.1 rico 58: }
59:
60:
61: /* reserva espacio para una matriz determinada y lo inicia a 0*/
62: /* devuelve el puntero */
63:
64: unsigned char ** CrearMatriz()
65: {
1.2 ! rico 66: char mensaje[MAX_LINE];
! 67: unsigned int i;
! 68: unsigned char **matrizD;
! 69:
! 70: /* 1º un puntero por cada fila */
! 71: matrizD = calloc(configuracion.ventana, sizeof(unsigned char *));
! 72: if (matrizD == NULL)
! 73: {
! 74: sprintf(mensaje, "[CrearMatriz] Memoria insuficiente");
! 75: Notificar(mensaje, ERROR_SALIR, ECO_NO);
! 76: /* el programa finaliza si no hay memoria suficiente */
! 77: }
! 78: /* 2º un 'char' por cada columna */
! 79: for(i=0; i<configuracion.ventana; i++)
! 80: {
! 81: matrizD[i] = calloc(configuracion.ventana, sizeof(unsigned char));
! 82: if (matrizD[i] == NULL)
! 83: {
! 84: sprintf(mensaje, "[CrearMatriz] Memoria insuficiente");
! 85: Notificar(mensaje, ERROR_SALIR, ECO_NO);
! 86: /* el programa finaliza si no hay memoria suficiente */
! 87: }
! 88: }
! 89: return matrizD;
1.1 rico 90: }
91:
92:
93: /* otro modo de hacer lo mismo */
94:
95: /* llamada en main() --> CrearMatriz(&matriz.Ddatoexp); */
96:
97: /* CrearMatriz(unsigned char ***matrizD)
98: {
99:
100:
1.2 ! rico 101: *matrizD = calloc(configuracion.ventana , sizeof(unsigned char *));
1.1 rico 102:
103:
1.2 ! rico 104: return *matrizD;
1.1 rico 105: }*/
106:
107:
108: /* crea todas las matrices de dependencias necesarias en función de la configuración */
109:
110: void CrearMatricesDependencias()
111: {
1.2 ! rico 112: /* creo las matrices de dependencias que sean necesarias */
! 113: /* mapa de posibles matrices por desacoplos */
! 114: /* tipo origen fuente */
! 115: /* SI SI SI */
! 116: /* SI SI NO */
! 117: /* SI NO NO */
! 118: /* NO NO NO */ /* -> por defecto no se desacopla nada */
! 119:
! 120: if(configuracion.desacoplarfuentes == SI)
! 121: {
! 122: if(configuracion.datos == SI) matriz.Ddatoexp = CrearMatriz();
! 123: if(configuracion.direcciones == SI) matriz.Ddir_exp = CrearMatriz();
! 124: if(configuracion.pila == SI) matriz.Dpilaexp = CrearMatriz();
! 125: if(configuracion.cc == SI) matriz.Destadoexp = CrearMatriz();
! 126:
! 127: if(configuracion.datos == SI) matriz.Ddatoimp = CrearMatriz();
! 128: if(configuracion.direcciones == SI) matriz.Ddir_imp = CrearMatriz();
! 129: if(configuracion.pila == SI) matriz.Dpilaimp = CrearMatriz();
! 130: if(configuracion.cc == SI) matriz.Destadoimp = CrearMatriz();
! 131:
! 132: if(configuracion.datos == SI) matriz.ADdatoexp = CrearMatriz();
! 133: if(configuracion.direcciones == SI) matriz.ADdir_exp = CrearMatriz();
! 134: if(configuracion.pila == SI) matriz.ADpilaexp = CrearMatriz();
! 135: if(configuracion.cc == SI) matriz.ADestadoexp = CrearMatriz();
! 136:
! 137: if(configuracion.datos == SI) matriz.ADdatoimp = CrearMatriz();
! 138: if(configuracion.direcciones == SI) matriz.ADdir_imp = CrearMatriz();
! 139: if(configuracion.pila == SI) matriz.ADpilaimp = CrearMatriz();
! 140: if(configuracion.cc == SI) matriz.ADestadoimp = CrearMatriz();
! 141:
! 142: if(configuracion.datos == SI) matriz.Sdatoexp = CrearMatriz();
! 143: if(configuracion.direcciones == SI) matriz.Sdir_exp = CrearMatriz();
! 144: if(configuracion.pila == SI) matriz.Spilaexp = CrearMatriz();
! 145: if(configuracion.cc == SI) matriz.Sestadoexp = CrearMatriz();
! 146:
! 147: if(configuracion.datos == SI) matriz.Sdatoimp = CrearMatriz();
! 148: if(configuracion.direcciones == SI) matriz.Sdir_imp = CrearMatriz();
! 149: if(configuracion.pila == SI) matriz.Spilaimp = CrearMatriz();
! 150: if(configuracion.cc == SI) matriz.Sestadoimp = CrearMatriz();
! 151: }
! 152:
! 153: else if(configuracion.desacoplarorigen == SI)
! 154: {
! 155: if(configuracion.explicitos == SI) matriz.Ddatoexp = CrearMatriz();
! 156: if(configuracion.implicitos == SI) matriz.Ddatoimp = CrearMatriz();
! 157:
! 158: if(configuracion.explicitos == SI) matriz.ADdatoexp = CrearMatriz();
! 159: if(configuracion.implicitos == SI) matriz.ADdatoimp = CrearMatriz();
! 160:
! 161: if(configuracion.explicitos == SI) matriz.Sdatoexp = CrearMatriz();
! 162: if(configuracion.implicitos == SI) matriz.Sdatoimp = CrearMatriz();
! 163: }
! 164:
! 165: else if(configuracion.desacoplartipos == SI)
! 166: {
! 167: if(configuracion.verdaderas == SI) matriz.Ddatoexp = CrearMatriz();
! 168: if(configuracion.antidependencias == SI) matriz.ADdatoexp = CrearMatriz();
! 169: if(configuracion.salida == SI) matriz.Sdatoexp = CrearMatriz();
! 170: }
1.1 rico 171:
1.2 ! rico 172: matriz.D = CrearMatriz();
1.1 rico 173: }
174:
175:
176: /* inicia una matriz poniendo sus componentes a 0 */
177:
178: void IniciarMatriz(unsigned char **matriz)
179: {
1.2 ! rico 180: unsigned int i, j;
1.1 rico 181:
1.2 ! rico 182: if(matriz != NULL) for(i=0; i<configuracion.ventana; i++) for(j=0; j<configuracion.ventana; j++) matriz[i][j] = 0;
1.1 rico 183: }
184:
185:
186: /* inicia las matrices abiertas poniendo a 0 todas sus componentes */
187: /* utilizando la función anterior es más compacto aunque quizá algo más lento */
188:
189: void IniciarMatricesDependencias()
190: {
1.2 ! rico 191: unsigned int i, j, dim;
1.1 rico 192:
1.2 ! rico 193: dim = configuracion.ventana;
! 194:
! 195: if(matriz.Ddatoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddatoexp[i][j] = 0;
! 196: if(matriz.Ddir_exp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddir_exp[i][j] = 0;
! 197: if(matriz.Dpilaexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Dpilaexp[i][j] = 0;
! 198: if(matriz.Destadoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Destadoexp[i][j] = 0;
! 199:
! 200: if(matriz.Ddatoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddatoimp[i][j] = 0;
! 201: if(matriz.Ddir_imp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddir_imp[i][j] = 0;
! 202: if(matriz.Dpilaimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Dpilaimp[i][j] = 0;
! 203: if(matriz.Destadoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Destadoimp[i][j] = 0;
! 204:
! 205: if(matriz.ADdatoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdatoexp[i][j] = 0;
! 206: if(matriz.ADdir_exp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdir_exp[i][j] = 0;
! 207: if(matriz.ADpilaexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADpilaexp[i][j] = 0;
! 208: if(matriz.ADestadoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADestadoexp[i][j] = 0;
! 209:
! 210: if(matriz.ADdatoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdatoimp[i][j] = 0;
! 211: if(matriz.ADdir_imp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdir_imp[i][j] = 0;
! 212: if(matriz.ADpilaimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADpilaimp[i][j] = 0;
! 213: if(matriz.ADestadoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADestadoimp[i][j] = 0;
! 214:
! 215: if(matriz.Sdatoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdatoexp[i][j] = 0;
! 216: if(matriz.Sdir_exp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdir_exp[i][j] = 0;
! 217: if(matriz.Spilaexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Spilaexp[i][j] = 0;
! 218: if(matriz.Sestadoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sestadoexp[i][j] = 0;
! 219:
! 220: if(matriz.Sdatoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdatoimp[i][j] = 0;
! 221: if(matriz.Sdir_imp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdir_imp[i][j] = 0;
! 222: if(matriz.Spilaimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Spilaimp[i][j] = 0;
! 223: if(matriz.Sestadoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sestadoimp[i][j] = 0;
1.1 rico 224:
1.2 ! rico 225: if(matriz.D != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.D[i][j] = 0;
1.1 rico 226: }
227:
228:
229: /* libera la memoria reservada para una matriz */
230:
231: void LiberarMemoriaMatriz(unsigned char **matriz)
232: {
1.2 ! rico 233: unsigned int i;
1.1 rico 234:
1.2 ! rico 235: if(matriz != NULL) {for(i=0; i<configuracion.ventana; i++) free(matriz[i]); free(matriz);}
1.1 rico 236: }
237:
238:
239: /* libera la memoria reservada para las matrices abiertas */
240: /* utilizando la función anterior es más compacto aunque quizá algo más lento */
241:
242: void LiberarMemoriaMatricesDependencias()
243: {
1.2 ! rico 244: unsigned int i,dim;
1.1 rico 245:
1.2 ! rico 246: dim = configuracion.ventana;
1.1 rico 247:
1.2 ! rico 248: if(matriz.Ddatoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddatoexp[i]); free(matriz.Ddatoexp);}
! 249: if(matriz.Ddir_exp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddir_exp[i]); free(matriz.Ddir_exp);}
! 250: if(matriz.Dpilaexp != NULL) {for(i=0; i<dim; i++) free(matriz.Dpilaexp[i]); free(matriz.Dpilaexp);}
! 251: if(matriz.Destadoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Destadoexp[i]); free(matriz.Destadoexp);}
! 252:
! 253: if(matriz.Ddatoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddatoimp[i]); free(matriz.Ddatoimp);}
! 254: if(matriz.Ddir_imp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddir_imp[i]); free(matriz.Ddir_imp);}
! 255: if(matriz.Dpilaimp != NULL) {for(i=0; i<dim; i++) free(matriz.Dpilaimp[i]); free(matriz.Dpilaimp);}
! 256: if(matriz.Destadoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Destadoimp[i]); free(matriz.Destadoimp);}
! 257:
! 258: if(matriz.ADdatoexp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdatoexp[i]); free(matriz.ADdatoexp);}
! 259: if(matriz.ADdir_exp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdir_exp[i]); free(matriz.ADdir_exp);}
! 260: if(matriz.ADpilaexp != NULL) {for(i=0; i<dim; i++) free(matriz.ADpilaexp[i]); free(matriz.ADpilaexp);}
! 261: if(matriz.ADestadoexp != NULL) {for(i=0; i<dim; i++) free(matriz.ADestadoexp[i]); free(matriz.ADestadoexp);}
! 262:
! 263: if(matriz.ADdatoimp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdatoimp[i]); free(matriz.ADdatoimp);}
! 264: if(matriz.ADdir_imp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdir_imp[i]); free(matriz.ADdir_imp);}
! 265: if(matriz.ADpilaimp != NULL) {for(i=0; i<dim; i++) free(matriz.ADpilaimp[i]); free(matriz.ADpilaimp);}
! 266: if(matriz.ADestadoimp != NULL) {for(i=0; i<dim; i++) free(matriz.ADestadoimp[i]); free(matriz.ADestadoimp);}
! 267:
! 268: if(matriz.Sdatoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdatoexp[i]); free(matriz.Sdatoexp);}
! 269: if(matriz.Sdir_exp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdir_exp[i]); free(matriz.Sdir_exp);}
! 270: if(matriz.Spilaexp != NULL) {for(i=0; i<dim; i++) free(matriz.Spilaexp[i]); free(matriz.Spilaexp);}
! 271: if(matriz.Sestadoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Sestadoexp[i]); free(matriz.Sestadoexp);}
! 272:
! 273: if(matriz.Sdatoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdatoimp[i]); free(matriz.Sdatoimp);}
! 274: if(matriz.Sdir_imp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdir_imp[i]); free(matriz.Sdir_imp);}
! 275: if(matriz.Spilaimp != NULL) {for(i=0; i<dim; i++) free(matriz.Spilaimp[i]); free(matriz.Spilaimp);}
! 276: if(matriz.Sestadoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Sestadoimp[i]); free(matriz.Sestadoimp);}
1.1 rico 277:
1.2 ! rico 278: if(matriz.D != NULL) {for(i=0; i<dim; i++) free(matriz.D[i]); free(matriz.D);}
1.1 rico 279: }
280:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>