#ifndef FAISS_C_H
#define FAISS_C_H
#include <stdint.h>
typedef int64_t faiss_idx_t; typedef faiss_idx_t idx_t;
typedef float faiss_component_t; typedef float faiss_distance_t;
#define FAISS_DECLARE_CLASS(clazz) typedef struct Faiss##clazz##_H Faiss##clazz;
#define FAISS_DECLARE_CLASS_INHERITED(clazz, parent) \
typedef struct Faiss##parent##_H Faiss##clazz;
#define FAISS_DECLARE_INDEX_DOWNCAST(clazz) \
Faiss##clazz* faiss_##clazz##_cast(FaissIndex*);
#define FAISS_DECLARE_INDEX_BINARY_DOWNCAST(clazz) \
Faiss##clazz* faiss_##clazz##_cast(FaissIndexBinary*);
#define FAISS_DECLARE_SEARCH_PARAMETERS_DOWNCAST(clazz) \
Faiss##clazz* faiss_##clazz##_cast(FaissSearchParameters*);
#define FAISS_DECLARE_GETTER(clazz, ty, name) \
ty faiss_##clazz##_##name(const Faiss##clazz*);
#define FAISS_DECLARE_SETTER(clazz, ty, name) \
void faiss_##clazz##_set_##name(Faiss##clazz*, ty);
#define FAISS_DECLARE_GETTER_SETTER(clazz, ty, name) \
FAISS_DECLARE_GETTER(clazz, ty, name) \
FAISS_DECLARE_SETTER(clazz, ty, name)
#define FAISS_DECLARE_DESTRUCTOR(clazz) \
void faiss_##clazz##_free(Faiss##clazz* obj);
#endif