]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/rabin.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Authors : Yuan-Ting Hsieh, Hsuan-Heng Wu, Myoungwon Oh
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #ifndef CEPH_COMMON_RABIN_H_
16 #define CEPH_COMMON_RABIN_H_
20 RabinChunk(uint32_t window_size
, uint32_t rabin_prime
,
21 uint64_t mod_prime
, uint64_t pow
, vector
<uint64_t> rabin_mask
, uint64_t min
,
22 uint64_t max
, uint32_t num_bits
):
23 window_size(window_size
), rabin_prime(rabin_prime
), mod_prime(mod_prime
),
24 pow(pow
), rabin_mask(rabin_mask
), min(min
), max(max
), num_bits(num_bits
) {}
26 default_init_rabin_options();
29 void default_init_rabin_options() {
30 vector
<uint64_t> _rabin_mask
= {0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535};
33 mod_prime
= 6148914691236517051;
34 pow
= 907234050803559263; // pow(prime, window_size)
38 rabin_mask
= _rabin_mask
;
41 int do_rabin_chunks(bufferlist
& inputdata
,
42 vector
<pair
<uint64_t, uint64_t>> & chunks
,
43 uint64_t min
, uint64_t max
);
44 uint64_t gen_rabin_hash(char* chunk_data
, uint64_t off
, uint64_t len
= 0);
45 bool end_of_chunk(const uint64_t fp
, int numbits
);
46 void set_window_size(uint32_t size
) { window_size
= size
; }
47 void set_rabin_prime(uint32_t r_prime
) { rabin_prime
= r_prime
; }
48 void set_mod_prime(uint64_t m_prime
) { mod_prime
= m_prime
; }
49 void set_pow(uint64_t p
) { pow
= p
; }
50 void set_rabin_mask(vector
<uint64_t> & mask
) { rabin_mask
= mask
; }
51 void set_min_chunk(uint32_t c_min
) { min
= c_min
; }
52 void set_max_chunk(uint32_t c_max
) { max
= c_max
; }
53 int add_rabin_mask(uint64_t mask
) {
54 rabin_mask
.push_back(mask
);
55 for (int i
= 0; rabin_mask
.size(); i
++) {
56 if (rabin_mask
[i
] == mask
) {
62 void set_numbits(uint32_t bit
) { num_bits
= bit
; }
70 vector
<uint64_t> rabin_mask
;
77 #endif // CEPH_COMMON_RABIN_H_