X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=swcsa%2FintIndex%2FpsiDeltaCode.h;h=b3c277a1d2c623f429e44deacb4c87594e37f2dd;hb=HEAD;hp=1f955c8e279e4a65fee95542d4254ec2bd2aded7;hpb=102e33b134075765e6d4e0c38bc1307568ce5602;p=SXSI%2FTextCollection.git diff --git a/swcsa/intIndex/psiDeltaCode.h b/swcsa/intIndex/psiDeltaCode.h index 1f955c8..b3c277a 100644 --- a/swcsa/intIndex/psiDeltaCode.h +++ b/swcsa/intIndex/psiDeltaCode.h @@ -1,6 +1,6 @@ #include #include -#include +//#include #include #include @@ -11,8 +11,8 @@ typedef struct { unsigned int T; unsigned int negativeGap; unsigned int deltaCodesSize; // En palabras - unsigned int *deltaCodes; - unsigned int numberOfSamples; + unsigned int *deltaCodes; + unsigned int numberOfSamples; unsigned int *samples; unsigned int *pointers; unsigned int totalMem; // the size in bytes used; @@ -23,9 +23,9 @@ typedef struct { DeltaCompressedPsi deltaCompressPsi(unsigned int *Psi, unsigned int psiSize, unsigned int T); int getDeltaPsiValue(DeltaCompressedPsi *cPsi, unsigned int position); void storeDeltaCompressedPsi(DeltaCompressedPsi *compressedPsi, char *filename); -DeltaCompressedPsi loadDeltaCompressedPsi(char *filename); +DeltaCompressedPsi loadDeltaCompressedPsi(char *filename); void destroyDeltaCodesCompressedPsi(DeltaCompressedPsi *compressedPsi); - + // IMPLEMENTACI�N DAS FUNCI�NS //void destroyDeltaCodesCompressedPsi(DeltaCompressedPsi *compressedPsi) { @@ -34,54 +34,54 @@ void destroyDeltaCodesCompressedPsi(DeltaCompressedPsi *compressedPsi); // free(compressedPsi->pointers); //} // -// +// //DeltaCompressedPsi deltaCompressPsi(unsigned int *Psi, unsigned int psiSize, unsigned int T) { // // DeltaCompressedPsi cPsi; -// +// // int numberOfSamples; -// register int diff, deltaCodesPos; +// register int diff, deltaCodesPos; // register unsigned int k, p, aux, diffpositive, code, index; // unsigned int samplesIndex, codeLenght, currentInput, wordsDeltaCodes, totalSize; // unsigned int *deltaCodes; // unsigned int *samples; // unsigned int *pointers; -// +// // // Auxiliar para deltaCodes (estimamos como espacio maximo o do array de sufixos) -// unsigned int *deltaCodesAux; -// +// unsigned int *deltaCodesAux; +// // // Calculamos o mellor valor para negativeGap <= 64 // unsigned int negativeGap; // register unsigned int maxNegativeBits = 0; // k = psiSize; // while(k) { // k >>= 1; -// maxNegativeBits++; +// maxNegativeBits++; // } // if(maxNegativeBits<=26) negativeGap = 64; -// else negativeGap = 1<<(32-maxNegativeBits); -// +// else negativeGap = 1<<(32-maxNegativeBits); +// // // Reservamos espacio para as estructuras // numberOfSamples = (psiSize + T - 1) / T; // samples = (unsigned int *)malloc(sizeof(int)*numberOfSamples); // pointers = (unsigned int *)malloc(sizeof(int)*numberOfSamples); -// +// // deltaCodesAux = (unsigned int *)malloc(sizeof(int)*psiSize); -// for(index=0; index0) diffpositive = (negativeGap*diff-1)/(negativeGap-1); // else diffpositive = -negativeGap*diff; -// +// // k = 0; // aux = diffpositive; // while(aux) { @@ -94,48 +94,48 @@ void destroyDeltaCodesCompressedPsi(DeltaCompressedPsi *compressedPsi); // aux >>= 1; // p++; // } -// +// // code = diffpositive & ((1<<(k-1))-1); -// codeLenght = 2*p+k-2; +// codeLenght = 2*p+k-2; // // // Primeiro metemos os p-1 0's iniciais // deltaCodesPos += p-1; -// +// // // Agora metemos os p bits de k -// if( ((deltaCodesPos%32) + p) > 32 ) { +// if( ((deltaCodesPos%32) + p) > 32 ) { // deltaCodesAux[deltaCodesPos/32] |= (k>>((deltaCodesPos%32)+p-32)); -// deltaCodesAux[deltaCodesPos/32+1] = (k<<(64-(deltaCodesPos%32)-p)); +// deltaCodesAux[deltaCodesPos/32+1] = (k<<(64-(deltaCodesPos%32)-p)); // } else { -// deltaCodesAux[deltaCodesPos/32] |= (k<<(32-p-(deltaCodesPos%32))); +// deltaCodesAux[deltaCodesPos/32] |= (k<<(32-p-(deltaCodesPos%32))); // } // deltaCodesPos += p; -// +// // // Por �ltimo metemos os k-1 bits de code (sen o 1 inicial) -// if( ((deltaCodesPos%32) + (k-1)) > 32 ) { +// if( ((deltaCodesPos%32) + (k-1)) > 32 ) { // deltaCodesAux[deltaCodesPos/32] |= (code>>((deltaCodesPos%32)+(k-1)-32)); -// deltaCodesAux[deltaCodesPos/32+1] = (code<<(64-(deltaCodesPos%32)-(k-1))); +// deltaCodesAux[deltaCodesPos/32+1] = (code<<(64-(deltaCodesPos%32)-(k-1))); // } else { -// deltaCodesAux[deltaCodesPos/32] |= (code<<(32-(k-1)-(deltaCodesPos%32))); +// deltaCodesAux[deltaCodesPos/32] |= (code<<(32-(k-1)-(deltaCodesPos%32))); // } // deltaCodesPos += k-1; -// +// // } else { // samples[samplesIndex] = Psi[index]; -// pointers[samplesIndex++] = deltaCodesPos; -// currentInput = Psi[index]; -// } +// pointers[samplesIndex++] = deltaCodesPos; +// currentInput = Psi[index]; +// } // // } -// +// // // Ahora que xa sabemos o espacio necesario para os deltaCodes, reservamolo e liberamos a estructura auxiliar // wordsDeltaCodes = (deltaCodesPos+31)/32; // deltaCodes = (unsigned int *)malloc(sizeof(int)*wordsDeltaCodes); // for(index=0;indexsamples[position/cPsi->T]; // pointer = cPsi->pointers[position/cPsi->T]; -// +// // // Calculamos o numero de codigos a decodificar a partir da mostra -// toDecode = position % cPsi->T; -// +// toDecode = position % cPsi->T; +// // while(toDecode--) { -// +// // // Collemos o n�mero ceros iniciais // // Po�emos o inicio do c�digo nun enteiro (code) alineado a esquerda // // Non importa que non colla todo o c�digo, pero si temos asegurado que // // colle p e k (k<=32 (6bits), p<=5bits) // code = (cPsi->deltaCodes[pointer/32] << (pointer%32)) | // ((pointer%32 != 0) * (cPsi->deltaCodes[pointer/32+1] >> (32-(pointer%32)))); -// +// // //Ahora contamos o n�mero de ceros (p) que hai nas posicions da esquerda de code // p = 1; // while(!(code & 0x80000000)) { // code <<= 1; // p++; // } -// +// // // Ahora calculamos o numero de digitos da representacion binaria do codigo (k) -// k = code >> (32-p); -// +// k = code >> (32-p); +// // // Actualizamos o punteiro global sobre deltaCodes // pointer += 2*p-1; -// +// // // Po�emos a representacion binaria do codigo nun enteiro (code) alineado a esquerda // code = (cPsi->deltaCodes[pointer/32] << (pointer%32)) | // ((pointer%32 != 0) * (cPsi->deltaCodes[pointer/32+1] >> (32-(pointer%32)))); // code = ((code >> 1) | 0x80000000) >> (32-k); // pointer += k-1; -// +// // // Bixecci�n // if(code % cPsi->negativeGap) result += (code - (code/cPsi->negativeGap)); // else result -= code/cPsi->negativeGap; -// +// // } -// +// // return result; -// +// //} // // @@ -217,12 +217,12 @@ void destroyDeltaCodesCompressedPsi(DeltaCompressedPsi *compressedPsi); // write(file, compressedPsi->samples, compressedPsi->numberOfSamples*sizeof(int)); // write(file, compressedPsi->pointers, compressedPsi->numberOfSamples*sizeof(int)); // close(file); -// +// //} // // //DeltaCompressedPsi loadDeltaCompressedPsi(char *filename) { -// +// // DeltaCompressedPsi compressedPsi; // // int file; @@ -231,18 +231,18 @@ void destroyDeltaCodesCompressedPsi(DeltaCompressedPsi *compressedPsi); // printf("Cannot read file %s\n", filename); // exit(0); // } -// read(file, &(compressedPsi.T), sizeof(int)); +// read(file, &(compressedPsi.T), sizeof(int)); // read(file, &(compressedPsi.negativeGap), sizeof(int)); // read(file, &(compressedPsi.deltaCodesSize), sizeof(int)); // compressedPsi.deltaCodes = (unsigned int *)malloc(compressedPsi.deltaCodesSize*sizeof(int)); // read(file, compressedPsi.deltaCodes, compressedPsi.deltaCodesSize*sizeof(int)); -// read(file, &(compressedPsi.numberOfSamples), sizeof(int)); +// read(file, &(compressedPsi.numberOfSamples), sizeof(int)); // compressedPsi.samples = (unsigned int *)malloc(compressedPsi.numberOfSamples*sizeof(int)); // compressedPsi.pointers = (unsigned int *)malloc(compressedPsi.numberOfSamples*sizeof(int)); // read(file, compressedPsi.samples, compressedPsi.numberOfSamples*sizeof(int)); -// read(file, compressedPsi.pointers, compressedPsi.numberOfSamples*sizeof(int)); +// read(file, compressedPsi.pointers, compressedPsi.numberOfSamples*sizeof(int)); // close(file); -// +// // return compressedPsi; // //}