queue_canvasobject.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Code generated by go run gen.go; DO NOT EDIT.
  2. package async
  3. import (
  4. "sync"
  5. "sync/atomic"
  6. "fyne.io/fyne/v2"
  7. )
  8. var itemCanvasObjectPool = sync.Pool{
  9. New: func() interface{} { return &itemCanvasObject{next: nil, v: nil} },
  10. }
  11. // In puts the given value at the tail of the queue.
  12. func (q *CanvasObjectQueue) In(v fyne.CanvasObject) {
  13. i := itemCanvasObjectPool.Get().(*itemCanvasObject)
  14. i.next = nil
  15. i.v = v
  16. var last, lastnext *itemCanvasObject
  17. for {
  18. last = loadCanvasObjectItem(&q.tail)
  19. lastnext = loadCanvasObjectItem(&last.next)
  20. if loadCanvasObjectItem(&q.tail) == last {
  21. if lastnext == nil {
  22. if casCanvasObjectItem(&last.next, lastnext, i) {
  23. casCanvasObjectItem(&q.tail, last, i)
  24. atomic.AddUint64(&q.len, 1)
  25. return
  26. }
  27. } else {
  28. casCanvasObjectItem(&q.tail, last, lastnext)
  29. }
  30. }
  31. }
  32. }
  33. // Out removes and returns the value at the head of the queue.
  34. // It returns nil if the queue is empty.
  35. func (q *CanvasObjectQueue) Out() fyne.CanvasObject {
  36. var first, last, firstnext *itemCanvasObject
  37. for {
  38. first = loadCanvasObjectItem(&q.head)
  39. last = loadCanvasObjectItem(&q.tail)
  40. firstnext = loadCanvasObjectItem(&first.next)
  41. if first == loadCanvasObjectItem(&q.head) {
  42. if first == last {
  43. if firstnext == nil {
  44. return nil
  45. }
  46. casCanvasObjectItem(&q.tail, last, firstnext)
  47. } else {
  48. v := firstnext.v
  49. if casCanvasObjectItem(&q.head, first, firstnext) {
  50. atomic.AddUint64(&q.len, ^uint64(0))
  51. itemCanvasObjectPool.Put(first)
  52. return v
  53. }
  54. }
  55. }
  56. }
  57. }
  58. // Len returns the length of the queue.
  59. func (q *CanvasObjectQueue) Len() uint64 {
  60. return atomic.LoadUint64(&q.len)
  61. }