queue.go 911 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package types
  2. import (
  3. log "github.com/sirupsen/logrus"
  4. )
  5. // Queue holds a limited size queue
  6. type Queue struct {
  7. Queue []Event
  8. L int //capacity
  9. }
  10. // NewQueue create a new queue with a size of l
  11. func NewQueue(l int) *Queue {
  12. if l == -1 {
  13. return &Queue{
  14. Queue: make([]Event, 0),
  15. L: int(^uint(0) >> 1), // max integer value, architecture independent
  16. }
  17. }
  18. q := &Queue{
  19. Queue: make([]Event, 0, l),
  20. L: l,
  21. }
  22. log.WithFields(log.Fields{"Capacity": q.L}).Debugf("Creating queue")
  23. return q
  24. }
  25. // Add an event in the queue. If it has already l elements, the first
  26. // element is dropped before adding the new m element
  27. func (q *Queue) Add(m Event) {
  28. for len(q.Queue) > q.L { //we allow to add one element more than the true capacity
  29. q.Queue = q.Queue[1:]
  30. }
  31. q.Queue = append(q.Queue, m)
  32. }
  33. // GetQueue returns the entire queue
  34. func (q *Queue) GetQueue() []Event {
  35. return q.Queue
  36. }