OcdEncoder::OcdEncoder(const uint8_t *inputBuffer, uint32_t inputBufferSize, uint32_t blockSize, uint32_t q, double epsilon) { mRhoList.clear(); mBlockSize = blockSize; mQ = q; SetEpsilon(epsilon); /* Calculate total memory, including auxiliary blocks */ mNumberOfSourceBlocks = ((inputBufferSize + mBlockSize - 1)/mBlockSize); mNumberOfAuxiliaryBlocks = mNumberOfSourceBlocks*(mQ*mEpsilon*0.55); mNumberOfIntermediateBlocks = mNumberOfSourceBlocks + mNumberOfAuxiliaryBlocks; /* Redirect source data */ mSourceBuffer.buffer = (uint8_t *)inputBuffer; mSourceBuffer.bufferSize = inputBufferSize; /* Allocate required memory */ mIntermediateBuffer.bufferSize = mNumberOfIntermediateBlocks*mBlockSize; mIntermediateBuffer.buffer = (uint8_t *) malloc(sizeof(uint8_t)*mIntermediateBuffer.bufferSize); /* Copy source data to intermediate data, and fill remaining space */ memcpy(mIntermediateBuffer.buffer, inputBuffer, inputBufferSize); memset((mIntermediateBuffer.buffer) + inputBufferSize, 0, mIntermediateBuffer.bufferSize - inputBufferSize); PreEncode(); }
OcdDecoder::OcdDecoder(uint32_t dataSize, uint32_t blockSize, uint32_t q, double epsilon) { mRhoList.clear(); mBlockStatus.clear(); if((mBlockSolution = (uint8_t *) malloc(sizeof(uint8_t)*mBlockSize)) == NULL) { fprintf(stderr, "Error allocating memory\n"); return; } mBlockSize = blockSize; mQ = q; SetEpsilon(epsilon); PreDecode(dataSize); }
void SIAM::SetUTepsilon(double U, double T, double epsilon) { SetU(U); SetT(T); SetEpsilon(epsilon); }