diff --git a/src/hnswutils.c b/src/hnswutils.c index 6e70363..1764c33 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -202,6 +202,19 @@ HnswInitPage(Buffer buf, Page page) HnswPageGetOpaque(page)->page_id = HNSW_PAGE_ID; } +/* + * Allocate a neighbor array + */ +static HnswNeighborArray * +HnswInitNeighborArray(int lm, HnswAllocator * allocator) +{ + HnswNeighborArray *a = HnswAlloc(allocator, offsetof(HnswNeighborArray, items) + sizeof(HnswCandidate) * lm); + + a->length = 0; + a->closerSet = false; + return a; +} + /* * Allocate neighbors */ @@ -216,14 +229,9 @@ HnswInitNeighbors(char *base, HnswElement element, int m, HnswAllocator * alloca for (int lc = 0; lc <= level; lc++) { - HnswNeighborArray *a; int lm = HnswGetLayerM(m, lc); - HnswPtrStore(base, neighborList[lc], (HnswNeighborArray *) HnswAlloc(allocator, offsetof(HnswNeighborArray, items) + sizeof(HnswCandidate) * lm)); - - a = HnswGetNeighbors(base, element, lc); - a->length = 0; - a->closerSet = false; + HnswPtrStore(base, neighborList[lc], HnswInitNeighborArray(lm, allocator)); } }