31 lines
722 B
C++
31 lines
722 B
C++
|
#ifndef RABIN_FINGERPRINT_H
|
||
|
#define RABIN_FINGERPRINT_H
|
||
|
|
||
|
#include <stdint.h>
|
||
|
#include <bitset>
|
||
|
#include <math.h>
|
||
|
#include <stdexcept>
|
||
|
|
||
|
class Rabin_fingerprint {
|
||
|
public:
|
||
|
Rabin_fingerprint(uint32_t polynomial, size_t window_size_in_bits);
|
||
|
|
||
|
void push_char (char c);
|
||
|
void push_bit (bool b);
|
||
|
void shift_bit (bool b);
|
||
|
void slide_char (char c_in, char c_out);
|
||
|
void slide_bit (bool b1, bool b2);
|
||
|
|
||
|
uint32_t get_fingerprint();
|
||
|
|
||
|
private:
|
||
|
void set_modulo_polynomial (uint32_t p);
|
||
|
void set_shift_polynomial (size_t window_size_in_bits);
|
||
|
|
||
|
uint32_t fingerprint = 0;
|
||
|
uint32_t polynomial = 0;
|
||
|
uint32_t shift_polynomial = 0;
|
||
|
};
|
||
|
|
||
|
#endif
|