4 # C functions that speed up commonly
5 # executed heap calculations in tree-based
12 int calculate_bucket_level(unsigned int k,
13 unsigned long long b);
14 int calculate_last_common_level(unsigned int k,
15 unsigned long long b1,
16 unsigned long long b2);
19 ffi.set_source("pyoram.util._virtual_heap_helper",
24 int calculate_bucket_level(unsigned int k,
28 unsigned long long pow;
30 // This is simply log2floor(b+1)
33 while (b >>= 1) {++h;}
36 b = (k - 1) * (b + 1) + 1;
39 while (pow < b) {++h; pow *= k;}
43 int calculate_last_common_level(unsigned int k,
44 unsigned long long b1,
45 unsigned long long b2)
48 level1 = calculate_bucket_level(k, b1);
49 level2 = calculate_bucket_level(k, b2);
50 if (level1 != level2) {
51 if (level1 > level2) {
52 while (level1 != level2) {
58 while (level2 != level1) {
73 if __name__ == "__main__":