#include "hll_union_shim.h"
#include "hll.rs.h"
namespace apache_datasketches_rs {
HllUnionShim::HllUnionShim(uint8_t lg_max_k) : u_(lg_max_k) {}
void HllUnionShim::update_sketch(const HllSketchShim& sketch) {
u_.update(sketch.inner());
}
void HllUnionShim::update_u64(uint64_t value) { u_.update(value); }
void HllUnionShim::update_i64(int64_t value) { u_.update(value); }
void HllUnionShim::update_f64(double value) { u_.update(value); }
void HllUnionShim::update_str(rust::Str value) {
if (value.empty()) return;
u_.update(value.data(), value.size());
}
void HllUnionShim::update_bytes(rust::Slice<const uint8_t> value) {
u_.update(value.data(), value.size());
}
std::unique_ptr<HllSketchShim> HllUnionShim::get_result(TargetHllType tgt_type) const {
return std::make_unique<HllSketchShim>(u_.get_result(to_cpp_target_type(tgt_type)));
}
std::unique_ptr<std::vector<uint8_t>> HllUnionShim::serialize_compact(TargetHllType tgt_type) const {
return std::make_unique<std::vector<uint8_t>>(
u_.get_result(to_cpp_target_type(tgt_type)).serialize_compact());
}
std::unique_ptr<std::vector<uint8_t>> HllUnionShim::serialize_updatable(TargetHllType tgt_type) const {
return std::make_unique<std::vector<uint8_t>>(
u_.get_result(to_cpp_target_type(tgt_type)).serialize_updatable());
}
double HllUnionShim::get_estimate() const { return u_.get_estimate(); }
double HllUnionShim::get_lower_bound(uint8_t num_std_dev) const {
return u_.get_lower_bound(num_std_dev);
}
double HllUnionShim::get_upper_bound(uint8_t num_std_dev) const {
return u_.get_upper_bound(num_std_dev);
}
bool HllUnionShim::is_empty() const { return u_.is_empty(); }
void HllUnionShim::reset() { u_.reset(); }
std::unique_ptr<HllUnionShim> new_hll_union(uint8_t lg_max_k) {
return std::make_unique<HllUnionShim>(lg_max_k);
}
}