Skip to main content

apache_datasketches_sys/
hll.rs

1#[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}