mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 08:02:27 -05:00 
			
		
		
		
	* start moving some database stuff around * continue moving db stuff around * more fiddling * more updates * and some more * and yet more * i broke SOMETHING but what, it's a mystery * tidy up * vendor ttlcache * use ttlcache * fix up some tests * rename some stuff * little reminder * some more updates
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ttlcache
 | |
| 
 | |
| import (
 | |
| 	"container/heap"
 | |
| )
 | |
| 
 | |
| func newPriorityQueue() *priorityQueue {
 | |
| 	queue := &priorityQueue{}
 | |
| 	heap.Init(queue)
 | |
| 	return queue
 | |
| }
 | |
| 
 | |
| type priorityQueue struct {
 | |
| 	items []*item
 | |
| }
 | |
| 
 | |
| func (pq *priorityQueue) update(item *item) {
 | |
| 	heap.Fix(pq, item.queueIndex)
 | |
| }
 | |
| 
 | |
| func (pq *priorityQueue) push(item *item) {
 | |
| 	heap.Push(pq, item)
 | |
| }
 | |
| 
 | |
| func (pq *priorityQueue) pop() *item {
 | |
| 	if pq.Len() == 0 {
 | |
| 		return nil
 | |
| 	}
 | |
| 	return heap.Pop(pq).(*item)
 | |
| }
 | |
| 
 | |
| func (pq *priorityQueue) remove(item *item) {
 | |
| 	heap.Remove(pq, item.queueIndex)
 | |
| }
 | |
| 
 | |
| func (pq priorityQueue) Len() int {
 | |
| 	length := len(pq.items)
 | |
| 	return length
 | |
| }
 | |
| 
 | |
| // Less will consider items with time.Time default value (epoch start) as more than set items.
 | |
| func (pq priorityQueue) Less(i, j int) bool {
 | |
| 	if pq.items[i].expireAt.IsZero() {
 | |
| 		return false
 | |
| 	}
 | |
| 	if pq.items[j].expireAt.IsZero() {
 | |
| 		return true
 | |
| 	}
 | |
| 	return pq.items[i].expireAt.Before(pq.items[j].expireAt)
 | |
| }
 | |
| 
 | |
| func (pq priorityQueue) Swap(i, j int) {
 | |
| 	pq.items[i], pq.items[j] = pq.items[j], pq.items[i]
 | |
| 	pq.items[i].queueIndex = i
 | |
| 	pq.items[j].queueIndex = j
 | |
| }
 | |
| 
 | |
| func (pq *priorityQueue) Push(x interface{}) {
 | |
| 	item := x.(*item)
 | |
| 	item.queueIndex = len(pq.items)
 | |
| 	pq.items = append(pq.items, item)
 | |
| }
 | |
| 
 | |
| func (pq *priorityQueue) Pop() interface{} {
 | |
| 	old := pq.items
 | |
| 	n := len(old)
 | |
| 	item := old[n-1]
 | |
| 	item.queueIndex = -1
 | |
| 	pq.items = old[0 : n-1]
 | |
| 	return item
 | |
| }
 |