#pragma once

#include <stdio.h>
#include "utils.h"

// you can add more structures here or modify existing structrues.

typedef struct HNSWGraph
{
    size_t layers_num; // number of layers
} HNSWGraph;

typedef struct HNSWContext
{
    size_t dim;       // dimension of dataset
    size_t len;       // size of dataset
    VecData *data;    // vectors will be loaded into this array
    HNSWGraph *graph; // graph of HNSW
} HNSWContext;

// you can declare some help functions here, and implement them in 'hnsw.c'


// public functions here
// Please do not modify these function signatures!
// To simply our program, we do not consider reclaiming memory space here.
// TODO: Please implement these functions according to HNSW algorithm.
HNSWContext *hnsw_init_context(const char *filename, size_t dim, size_t len);
void hnsw_approximate_knn(HNSWContext *ctx, VecData *q, int *results, int k);
