#ifndef TUPLE_A_NOT_B_HPP_
#define TUPLE_A_NOT_B_HPP_
#include "tuple_sketch.hpp"
#include "theta_set_difference_base.hpp"
namespace datasketches {
template<
typename Summary,
typename Allocator = std::allocator<Summary>
>
class tuple_a_not_b {
public:
using Entry = std::pair<uint64_t, Summary>;
using ExtractKey = pair_extract_key<uint64_t, Summary>;
using CompactSketch = compact_tuple_sketch<Summary, Allocator>;
using AllocEntry = typename std::allocator_traits<Allocator>::template rebind_alloc<Entry>;
using State = theta_set_difference_base<Entry, ExtractKey, CompactSketch, AllocEntry>;
explicit tuple_a_not_b(uint64_t seed = DEFAULT_SEED, const Allocator& allocator = Allocator());
template<typename FwdSketch, typename Sketch>
CompactSketch compute(FwdSketch&& a, const Sketch& b, bool ordered = true) const;
private:
State state_;
};
}
#include "tuple_a_not_b_impl.hpp"
#endif