@@ -41,7 +41,7 @@ void theta_union_base<EN, EK, P, S, CS, A>::update(SS&& sketch) {
4141 if (sketch.is_empty ()) return ;
4242 if (sketch.get_seed_hash () != compute_seed_hash (table_.seed_ )) throw std::invalid_argument (" seed hash mismatch" );
4343 table_.is_empty_ = false ;
44- if (sketch. get_theta64 () < union_theta_) union_theta_ = sketch.get_theta64 ();
44+ union_theta_ = std::min (union_theta_, sketch.get_theta64 () );
4545 for (auto & entry: sketch) {
4646 const uint64_t hash = EK ()(entry);
4747 if (hash < union_theta_ && hash < table_.theta_ ) {
@@ -55,7 +55,7 @@ void theta_union_base<EN, EK, P, S, CS, A>::update(SS&& sketch) {
5555 if (sketch.is_ordered ()) break ; // early stop
5656 }
5757 }
58- if (table_. theta_ < union_theta_) union_theta_ = table_.theta_ ;
58+ union_theta_ = std::min (union_theta_, table_.theta_ ) ;
5959}
6060
6161template <typename EN , typename EK , typename P, typename S, typename CS , typename A>
@@ -65,16 +65,16 @@ CS theta_union_base<EN, EK, P, S, CS, A>::get_result(bool ordered) const {
6565 entries.reserve (table_.num_entries_ );
6666 uint64_t theta = std::min (union_theta_, table_.theta_ );
6767 const uint32_t nominal_num = 1 << table_.lg_nom_size_ ;
68- if (union_theta_ >= theta && table_.num_entries_ <= nominal_num ) {
68+ if (union_theta_ >= table_.theta_ ) {
6969 std::copy_if (table_.begin (), table_.end (), std::back_inserter (entries), key_not_zero<EN , EK >());
7070 } else {
7171 std::copy_if (table_.begin (), table_.end (), std::back_inserter (entries), key_not_zero_less_than<uint64_t , EN , EK >(theta));
72- if (entries. size () > nominal_num) {
73- std::nth_element (entries.begin (), entries. begin () + nominal_num, entries. end (), comparator ());
74- theta = EK ()(entries[nominal_num] );
75- entries. erase (entries. begin () + nominal_num, entries. end () );
76- entries.shrink_to_fit ( );
77- }
72+ }
73+ if (entries.size () > nominal_num) {
74+ std::nth_element (entries. begin (), entries. begin () + nominal_num, entries. end (), comparator () );
75+ theta = EK ()(entries[nominal_num] );
76+ entries. erase (entries. begin () + nominal_num, entries.end () );
77+ entries. shrink_to_fit ();
7878 }
7979 if (ordered) std::sort (entries.begin (), entries.end (), comparator ());
8080 return CS (table_.is_empty_ , ordered, compute_seed_hash (table_.seed_ ), theta, std::move (entries));
0 commit comments