2016-10-05 09:59:43 +03:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef RICE_DELTA_DECODER_H
|
|
|
|
#define RICE_DELTA_DECODER_H
|
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
namespace safebrowsing {
|
|
|
|
|
|
|
|
class RiceDeltaDecoder {
|
|
|
|
public:
|
|
|
|
// This decoder is tailored for safebrowsing v4, including the
|
|
|
|
// bit reading order and how the remainder part is interpreted.
|
|
|
|
// The caller just needs to feed the byte stream received from
|
|
|
|
// network directly. Note that the input buffer must be mutable
|
|
|
|
// since the decoder will do some pre-processing before decoding.
|
|
|
|
RiceDeltaDecoder(uint8_t* aEncodedData, size_t aEncodedDataSize);
|
|
|
|
|
2016-10-26 05:03:49 +03:00
|
|
|
// @param aNumEntries The number of values to be decoded, not including
|
|
|
|
// the first value.
|
|
|
|
// @param aDecodedData A pre-allocated output buffer. Note that
|
|
|
|
// aDecodedData[0] will be filled with |aFirstValue|
|
|
|
|
// and the buffer length (in byte) should be
|
|
|
|
// ((aNumEntries + 1) * sizeof(uint32_t)).
|
2016-10-05 09:59:43 +03:00
|
|
|
bool Decode(uint32_t aRiceParameter,
|
|
|
|
uint32_t aFirstValue,
|
|
|
|
uint32_t aNumEntries,
|
|
|
|
uint32_t* aDecodedData);
|
|
|
|
|
|
|
|
private:
|
|
|
|
uint8_t* mEncodedData;
|
|
|
|
size_t mEncodedDataSize;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace safebrowsing
|
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
#endif // UPDATE_V4_DECODER_H
|