using System; namespace ZeroLevel.HNSW { public sealed class NSWReadOnlyOption { /// /// Max search buffer /// public readonly int EF; /// /// Distance function beetween vectors /// public readonly Func Distance; public readonly bool ExpandBestSelection; public readonly bool KeepPrunedConnections; public readonly NeighbourSelectionHeuristic SelectionHeuristic; private NSWReadOnlyOption( int ef, Func distance, bool expandBestSelection, bool keepPrunedConnections, NeighbourSelectionHeuristic selectionHeuristic) { EF = ef; Distance = distance; ExpandBestSelection = expandBestSelection; KeepPrunedConnections = keepPrunedConnections; SelectionHeuristic = selectionHeuristic; } public static NSWReadOnlyOption Create( int EF, Func distance, bool expandBestSelection = false, bool keepPrunedConnections = false, NeighbourSelectionHeuristic selectionHeuristic = NeighbourSelectionHeuristic.SelectSimple) => new NSWReadOnlyOption(EF, distance, expandBestSelection, keepPrunedConnections, selectionHeuristic); } }