Changeset: d79dea64dba9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d79dea64dba9
Modified Files:
monetdb5/extras/bwd/operations.c
Branch: bwd
Log Message:
* fixed the reconstruction of values (decompressInt)
Unterschiede (60 Zeilen):
diff --git a/monetdb5/extras/bwd/operations.c b/monetdb5/extras/bwd/operations.c
--- a/monetdb5/extras/bwd/operations.c
+++ b/monetdb5/extras/bwd/operations.c
@@ -205,30 +205,41 @@ str BWDLeftJoinApproximate(bat * res, ba
return MAL_SUCCEED;
};
-static inline int decompressIntValue(const int approximationI, const int
approximationbits, const int offsetBits, const clTail* compressedTail, const
unsigned int* residuals, const int residualI){
- /* const int index = compressedHead->positions[i];
*/
- const int residualBits = 32-approximationbits;
+static inline int decompressIntValue(const int approximationI, const int
approximationBits, const int offsetBits, const clTail* compressedTail, const
unsigned int* residuals, const int residualI){
+ const int residualBits = 32-approximationBits-offsetBits;
const unsigned int residualMask = (1 << residualBits)-1;
- /* const unsigned int residualBytes = residualBits/8; */
- const int approximationBytes = approximationbits/8-offsetBits/8;
- const int approximationMask = (1<<(approximationBytes*8))-1;
+ const int approximationBytes = approximationBits/8-offsetBits/8;
+ const int approximationMask = (1<<(approximationBits))-1;
+ const unsigned int* vals = (unsigned int*) compressedTail->elements;
+ const unsigned int targetTypeBits = sizeof(int)*8;
- const int slotI =
(approximationBytes*8)*approximationI/(sizeof(int)*8);
- const int offset =
((approximationBytes*8)*approximationI)%(sizeof(int)*8);
- const unsigned int compressedValue = (((unsigned
int*)compressedTail->elements)[slotI] >>
(8*sizeof(int)-offset-(approximationBytes*8))) & approximationMask;
+ const unsigned int slotI =
(approximationBytes*8)*approximationI/(sizeof(int)*8);
+ const unsigned int offset =
((approximationBytes*8)*approximationI)%(sizeof(int)*8);
+
+ const unsigned int compressedValue =
+ (((offset+approximationBits)<=targetTypeBits)*
+ (vals[slotI] >> (targetTypeBits-offset-approximationBits)) &
approximationMask)
+ + (((offset+approximationBits)>targetTypeBits)?
+
(((vals[slotI]<<(approximationBits-targetTypeBits+offset))
+ +
(vals[slotI+1]>>(targetTypeBits-(approximationBits-targetTypeBits+offset))))&approximationMask):0);
+
+
const size_t residualSlotI = (residualI*residualBits)/32;
const unsigned int residualOffset = (residualI*residualBits)%32;
- const unsigned int residual = (((unsigned int*)residuals)[residualSlotI]
-
>>
(32-residualOffset-residualBits))&residualMask;
+ const unsigned int residual =
+ (residualOffset+residualBits <= targetTypeBits)*
+ ((residuals[residualSlotI]
+ >>
(targetTypeBits-residualOffset-residualBits))&residualMask)
+ + (residualOffset+residualBits > targetTypeBits)*
+
(((residuals[residualSlotI]<<(residualBits-targetTypeBits+residualOffset))
+ + (residuals[residualSlotI+1] >>
+
(targetTypeBits-(residualBits-targetTypeBits+residualOffset))) )& residualMask);
+
const int deCompressedValue = compressedTail->base+
(compressedValue << residualBits)
+ residual;
-
- /* const int offset = approximationBytes*i; */
- /* const int compressedValue =
*(int*)&(compressedTail->elements[offset]) & approximationMask; */
- /* const int deCompressedValue = compressedTail->base +
(compressedValue << residualBits) + (*(int*)&residuals[residualI*residualBytes]
& residualMask); */
return deCompressedValue;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list