7 type nodeMaxHeap struct {
12 func (mh nodeMaxHeap) Len() int { return len(mh.IDs) }
14 func (mh nodeMaxHeap) Less(i, j int) bool {
15 m := mh.IDs[i].Distance(&mh.Target)
16 n := mh.IDs[j].Distance(&mh.Target)
20 func (mh *nodeMaxHeap) Pop() (ret interface{}) {
21 ret, mh.IDs = mh.IDs[len(mh.IDs)-1], mh.IDs[:len(mh.IDs)-1]
24 func (mh *nodeMaxHeap) Push(val interface{}) {
25 mh.IDs = append(mh.IDs, val.(nodeID))
27 func (mh nodeMaxHeap) Swap(i, j int) {
28 mh.IDs[i], mh.IDs[j] = mh.IDs[j], mh.IDs[i]
31 type closestNodesSelector struct {
36 func (cns *closestNodesSelector) Push(id nodeID) {
37 heap.Push(&cns.closest, id)
38 if cns.closest.Len() > cns.k {
39 heap.Pop(&cns.closest)
43 func (cns *closestNodesSelector) IDs() []nodeID {
44 return cns.closest.IDs
47 func newKClosestNodesSelector(k int, targetID nodeID) (ret closestNodesSelector) {
49 ret.closest.Target = targetID