apache_datasketches_sys/
hll.rs1#[cxx::bridge(namespace = "apache_datasketches_rs")]
2pub mod ffi {
3 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
4 enum TargetHllType {
5 Hll4,
6 Hll6,
7 Hll8,
8 }
9
10 unsafe extern "C++" {
11 include!("hll_sketch_shim.h");
12 include!("hll_union_shim.h");
13
14 type HllSketchShim;
15
16 fn new_hll_sketch(lg_config_k: u8, tgt_type: TargetHllType) -> Result<UniquePtr<HllSketchShim>>;
17 fn hll_sketch_copy_as(sketch: &HllSketchShim, tgt_type: TargetHllType) -> UniquePtr<HllSketchShim>;
18 fn hll_sketch_deserialize(bytes: &[u8]) -> Result<UniquePtr<HllSketchShim>>;
19
20 fn update_u64(self: Pin<&mut HllSketchShim>, value: u64);
21 fn update_i64(self: Pin<&mut HllSketchShim>, value: i64);
22 fn update_f64(self: Pin<&mut HllSketchShim>, value: f64);
23 fn update_str(self: Pin<&mut HllSketchShim>, value: &str);
24 fn update_bytes(self: Pin<&mut HllSketchShim>, value: &[u8]);
25
26 fn get_estimate(self: &HllSketchShim) -> f64;
27 fn get_lower_bound(self: &HllSketchShim, num_std_dev: u8) -> Result<f64>;
28 fn get_upper_bound(self: &HllSketchShim, num_std_dev: u8) -> Result<f64>;
29 fn get_lg_config_k(self: &HllSketchShim) -> u8;
30 fn get_target_type(self: &HllSketchShim) -> TargetHllType;
31 fn is_empty(self: &HllSketchShim) -> bool;
32 fn reset(self: Pin<&mut HllSketchShim>);
33 fn to_string_summary(self: &HllSketchShim) -> String;
34
35 fn serialize_compact(self: &HllSketchShim) -> Vec<u8>;
36 fn serialize_updatable(self: &HllSketchShim) -> Vec<u8>;
37
38 type HllUnionShim;
39
40 fn new_hll_union(lg_max_k: u8) -> Result<UniquePtr<HllUnionShim>>;
41
42 fn update_sketch(self: Pin<&mut HllUnionShim>, sketch: &HllSketchShim);
43 fn update_u64(self: Pin<&mut HllUnionShim>, value: u64);
44 fn update_i64(self: Pin<&mut HllUnionShim>, value: i64);
45 fn update_f64(self: Pin<&mut HllUnionShim>, value: f64);
46 fn update_str(self: Pin<&mut HllUnionShim>, value: &str);
47 fn update_bytes(self: Pin<&mut HllUnionShim>, value: &[u8]);
48
49 fn get_result(self: &HllUnionShim, tgt_type: TargetHllType) -> UniquePtr<HllSketchShim>;
50
51 fn serialize_compact(self: &HllUnionShim, tgt_type: TargetHllType) -> Vec<u8>;
52 fn serialize_updatable(self: &HllUnionShim, tgt_type: TargetHllType) -> Vec<u8>;
53
54 fn get_estimate(self: &HllUnionShim) -> f64;
55 fn get_lower_bound(self: &HllUnionShim, num_std_dev: u8) -> Result<f64>;
56 fn get_upper_bound(self: &HllUnionShim, num_std_dev: u8) -> Result<f64>;
57 fn is_empty(self: &HllUnionShim) -> bool;
58 fn reset(self: Pin<&mut HllUnionShim>);
59 }
60}