2#define _MINISKETCH_H_ 1
16# ifdef MINISKETCH_BUILD
17# define MINISKETCH_API __declspec(dllexport)
19# define MINISKETCH_API
21# elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(MINISKETCH_BUILD)
22# define MINISKETCH_API __attribute__ ((visibility ("default")))
24# define MINISKETCH_API
29# if __cplusplus >= 201103L
33# if __cplusplus >= 201703L
194#if __cplusplus >= 201103L
232 Minisketch(
const Minisketch&
sketch)
noexcept
234 if (
sketch.m_minisketch) {
240 Minisketch& operator=(
const Minisketch&
sketch)
noexcept
252 Minisketch() noexcept =
delete;
255 Minisketch(Minisketch&&) noexcept =
default;
258 Minisketch& operator=(Minisketch&&) noexcept =
default;
288 Minisketch& SetSeed(
uint64_t seed)
noexcept
304 Minisketch& Merge(
const Minisketch&
sketch)
noexcept
312 bool Decode(std::vector<uint64_t>& result)
const
315 if (
ret == -1)
return false;
324 std::vector<unsigned char>
Serialize()
const
334 Minisketch& Deserialize(
336 typename std::enable_if<
337 std::is_convertible<
typename std::remove_pointer<
decltype(
obj.data())>::type (*)[],
const unsigned char (*)[]>::value &&
338 std::is_convertible<
decltype(
obj.size()), std::size_t>::value,
340 >::type =
nullptr) noexcept
347#if __cplusplus >= 201703L
353 if (
ret == -1)
return {};
#define T(expected, seed, data)
MINISKETCH_API void minisketch_serialize(const minisketch *sketch, unsigned char *output)
Serialize a sketch to bytes.
MINISKETCH_API void minisketch_set_seed(minisketch *sketch, uint64_t seed)
Set the seed for randomizing algorithm choices to a fixed value.
MINISKETCH_API uint32_t minisketch_implementation(const minisketch *sketch)
Get the implementation of a sketch.
MINISKETCH_API size_t minisketch_capacity(const minisketch *sketch)
Get the capacity of a sketch.
MINISKETCH_API size_t minisketch_compute_capacity(uint32_t bits, size_t max_elements, uint32_t fpbits)
Compute the capacity needed to achieve a certain rate of false positives.
MINISKETCH_API ssize_t minisketch_decode(const minisketch *sketch, size_t max_elements, uint64_t *output)
Decode a sketch.
MINISKETCH_API int minisketch_bits_supported(uint32_t bits)
Determine whether support for elements of bits bits was compiled in.
MINISKETCH_API size_t minisketch_merge(minisketch *sketch, const minisketch *other_sketch)
Merge the elements of another sketch into this sketch.
MINISKETCH_API size_t minisketch_serialized_size(const minisketch *sketch)
Compute the size in bytes for serializing a given sketch.
MINISKETCH_API minisketch * minisketch_create(uint32_t bits, uint32_t implementation, size_t capacity)
Construct a sketch for a given element size, implementation and capacity.
MINISKETCH_API uint32_t minisketch_implementation_max(void)
Determine the maximum number of implementations available.
MINISKETCH_API void minisketch_add_uint64(minisketch *sketch, uint64_t element)
Add an element to a sketch.
MINISKETCH_API minisketch * minisketch_clone(const minisketch *sketch)
Clone a sketch.
MINISKETCH_API uint32_t minisketch_bits(const minisketch *sketch)
Get the element size of a sketch in bits.
MINISKETCH_API size_t minisketch_compute_max_elements(uint32_t bits, size_t capacity, uint32_t fpbits)
Compute what max_elements can be decoded for a certain rate of false positives.
MINISKETCH_API void minisketch_deserialize(minisketch *sketch, const unsigned char *input)
Deserialize a sketch from bytes.
MINISKETCH_API void minisketch_destroy(minisketch *sketch)
Destroy a sketch.
struct minisketch minisketch
Opaque type for decoded sketches.
MINISKETCH_API int minisketch_implementation_supported(uint32_t bits, uint32_t implementation)
Determine if the a combination of bits and implementation number is available.
DecodeResult Decode(const std::string &str, CharLimit limit)
Decode a Bech32 or Bech32m string.
void Serialize(Stream &, V)=delete
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.