#include "wrapper.h" GCSFilter::ElementSet create_element_set(Slice const* hashes, size_t length) { GCSFilter::ElementSet elements; for (size_t i = 0; i < length; i++) { Slice hash = hashes[i]; auto element = GCSFilter::Element(hash.bytes, hash.bytes + hash.length); elements.insert(std::move(element)); } return elements; } GCSFilter const* create_filter(Slice const* hashes, size_t length) { auto elements = create_element_set(hashes, length); return new GCSFilter({0, 0, 20, 1 << 20}, elements); } Slice encode_filter(GCSFilter const* filter) { std::vector encoded = filter->GetEncoded(); size_t len = encoded.size(); unsigned char* ptr = new unsigned char[len]; std::copy(encoded.begin(), encoded.end(), ptr); return Slice { ptr, len }; } bool filter_match(GCSFilter const* filter, Slice hash) { auto element = GCSFilter::Element(hash.bytes, hash.bytes + hash.length); return filter->Match(element); } bool filter_match_any(GCSFilter const* filter, Slice const* hashes, size_t length) { auto elements = create_element_set(hashes, length); return filter->MatchAny(elements); } void free_slice(Slice slice) { delete[] slice.bytes; } void free_filter(GCSFilter const* filter) { delete filter; }