00001 #include "eg_emptyhandles.h" 00002 int DPremoveEmptyHandles (int *const nIneq, 00003 int **const ndominoes, 00004 int ***const naset, 00005 int ***const nbset, 00006 int **const nhandle, 00007 int ****const aset, 00008 int ****const bset, 00009 int ***const handle) 00010 { 00011 00012 int nIneq2 = 0; 00013 int *ndominoes2 = 0; 00014 int **naset2 = 0; 00015 int **nbset2 = 0; 00016 int *nhandle2 = 0; 00017 int ***aset2 = 0; 00018 int ***bset2 = 0; 00019 int **handle2 = 0; 00020 00021 int i, 00022 cnt = 0, 00023 d, 00024 nelim = 0; 00025 00026 for (i = 0; i < *nIneq; i++) 00027 if ((*nhandle)[i] == 0) 00028 nelim += 1; 00029 00030 nIneq2 = *nIneq - nelim; 00031 if (!nelim) 00032 return 0; 00033 00034 ndominoes2 = EGsMalloc (int, nIneq2); 00035 naset2 = EGsMalloc (int *, 00036 nIneq2); 00037 nbset2 = EGsMalloc (int *, 00038 nIneq2); 00039 nhandle2 = EGsMalloc (int, 00040 nIneq2); 00041 aset2 = EGsMalloc (int **, 00042 nIneq2); 00043 bset2 = EGsMalloc (int **, 00044 nIneq2); 00045 handle2 = EGsMalloc (int *, 00046 nIneq2); 00047 00048 for (i = 0; i < *nIneq; i++) 00049 { 00050 if ((*nhandle)[i] == 0) 00051 { 00052 for (d = 0; d < (*ndominoes)[i]; d++) 00053 { 00054 EGfree ((*aset)[i][d]); 00055 EGfree ((*bset)[i][d]); 00056 } 00057 EGfree ((*naset)[i]); 00058 EGfree ((*nbset)[i]); 00059 EGfree ((*aset)[i]); 00060 EGfree ((*bset)[i]); 00061 } 00062 else 00063 { 00064 ndominoes2[cnt] = (*ndominoes)[i]; 00065 naset2[cnt] = (*naset)[i]; 00066 nbset2[cnt] = (*nbset)[i]; 00067 nhandle2[cnt] = (*nhandle)[i]; 00068 aset2[cnt] = (*aset)[i]; 00069 bset2[cnt] = (*bset)[i]; 00070 handle2[cnt] = (*handle)[i]; 00071 cnt += 1; 00072 } 00073 } 00074 00075 EGfree (*ndominoes); 00076 EGfree (*naset); 00077 EGfree (*nbset); 00078 EGfree (*nhandle); 00079 EGfree (*aset); 00080 EGfree (*bset); 00081 EGfree (*handle); 00082 00083 *ndominoes = ndominoes2; 00084 *naset = naset2; 00085 *nbset = nbset2; 00086 *nhandle = nhandle2; 00087 *aset = aset2; 00088 *bset = bset2; 00089 *handle = handle2; 00090 00091 *nIneq = nIneq2; 00092 fprintf (stderr, "Eliminated %d empty-handle DP contraints\n", nelim); 00093 00094 return 0; 00095 00096 }