File: relatableq.go

package info (click to toggle)
golang-github-brentp-irelate 0.0.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 12,624 kB
  • sloc: makefile: 10; python: 5; sh: 4
file content (35 lines) | stat: -rw-r--r-- 848 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package irelate

import "github.com/brentp/irelate/interfaces"

// relatableQueue implements the heap interface and is used to send Relatables
// back the the caller in order (as deteremined by Less()).
type relatableQueue struct {
	rels []interfaces.Relatable
	less func(a, b interfaces.Relatable) bool
}

func (q relatableQueue) Len() int { return len(q.rels) }
func (q relatableQueue) Less(i, j int) bool {
	return q.less(q.rels[i], q.rels[j])
}
func (q relatableQueue) Swap(i, j int) {
	if i < len(q.rels) {
		q.rels[j], q.rels[i] = q.rels[i], q.rels[j]
	}
}
func (q *relatableQueue) Push(i interface{}) {
	iv := i.(interfaces.Relatable)
	(*q).rels = append((*q).rels, iv)
}

func (q *relatableQueue) Pop() interface{} {
	n := len((*q).rels)
	if n == 0 {
		return nil
	}
	old := (*q).rels
	iv := old[n-1]
	(*q).rels = old[0 : n-1]
	return iv
}