/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ // -*- c++ -*- #include "io_c.h" #include #include "../macros_impl.h" using faiss::IOReader; using faiss::IOWriter; struct CustomIOReader : IOReader { size_t (*func)(void* ptr, size_t size, size_t nitems) = nullptr; CustomIOReader(size_t (*func_in)(void* ptr, size_t size, size_t nitems)); size_t operator()(void* ptr, size_t size, size_t nitems) override; }; CustomIOReader::CustomIOReader( size_t (*func_in)(void* ptr, size_t size, size_t nitems)) : func(func_in) {} size_t CustomIOReader::operator()(void* ptr, size_t size, size_t nitems) { return func(ptr, size, nitems); } int faiss_CustomIOReader_new( FaissCustomIOReader** p_out, size_t (*func_in)(void* ptr, size_t size, size_t nitems)) { try { *p_out = reinterpret_cast( new CustomIOReader(func_in)); } CATCH_AND_HANDLE } void faiss_CustomIOReader_free(FaissCustomIOReader* obj) { delete reinterpret_cast(obj); } struct CustomIOWriter : IOWriter { size_t (*func)(const void* ptr, size_t size, size_t nitems) = nullptr; CustomIOWriter( size_t (*func_in)(const void* ptr, size_t size, size_t nitems)); size_t operator()(const void* ptr, size_t size, size_t nitems) override; }; CustomIOWriter::CustomIOWriter( size_t (*func_in)(const void* ptr, size_t size, size_t nitems)) : func(func_in) {} size_t CustomIOWriter::operator()(const void* ptr, size_t size, size_t nitems) { return func(ptr, size, nitems); } int faiss_CustomIOWriter_new( FaissCustomIOWriter** p_out, size_t (*func_in)(const void* ptr, size_t size, size_t nitems)) { try { *p_out = reinterpret_cast( new CustomIOWriter(func_in)); } CATCH_AND_HANDLE } void faiss_CustomIOWriter_free(FaissCustomIOWriter* obj) { delete reinterpret_cast(obj); }