public void InternalSearch(object q, Result candidates, HashSet<int> inserted, IResult res) { do { var start = candidates.PopFirst (); if (start.Dist > res.CoveringRadius) { break; } var adjList = this.Vertices[start.ObjID]; foreach (var item in adjList) { if (inserted.Add(item.ObjID)) { // true iff it wasn't evaluated var d = this.DB.Dist (this.DB [item.ObjID], q); candidates.Push (item.ObjID, d); res.Push(item.ObjID, d); } } } while (candidates.Count > 0); }