ccxt-go/exchange_queue.go
zhangkun9038@dingtalk.com 1a2ce7046a first add
2025-02-28 10:33:20 +08:00

66 lines
1020 B
Go

package ccxt
import (
"errors"
"sync"
)
type QueueElement struct {
Cost float64
Task chan bool
Id string
}
type Queue struct {
elements []QueueElement
mu sync.Mutex
}
func NewQueue() Queue {
return Queue{
elements: []QueueElement{},
}
}
func (q *Queue) Enqueue(element QueueElement) {
q.mu.Lock()
defer q.mu.Unlock()
q.elements = append(q.elements, element)
}
func (q *Queue) Dequeue() (QueueElement, error) {
q.mu.Lock()
defer q.mu.Unlock()
if len(q.elements) == 0 {
return QueueElement{}, errors.New("queue is empty")
}
front := q.elements[0]
q.elements = q.elements[1:]
return front, nil
}
func (q *Queue) Length() int {
q.mu.Lock()
defer q.mu.Unlock()
return len(q.elements)
}
func (q *Queue) IsEmpty() bool {
q.mu.Lock()
defer q.mu.Unlock()
return len(q.elements) == 0
}
func (q *Queue) Peek() (QueueElement, error) {
q.mu.Lock()
defer q.mu.Unlock()
if len(q.elements) == 0 {
return QueueElement{}, errors.New("queue is empty")
}
return q.elements[0], nil
}