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>