| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // Code generated by go run gen.go; DO NOT EDIT.
- package async
- import (
- "sync"
- "sync/atomic"
- "fyne.io/fyne/v2"
- )
- var itemCanvasObjectPool = sync.Pool{
- New: func() interface{} { return &itemCanvasObject{next: nil, v: nil} },
- }
- // In puts the given value at the tail of the queue.
- func (q *CanvasObjectQueue) In(v fyne.CanvasObject) {
- i := itemCanvasObjectPool.Get().(*itemCanvasObject)
- i.next = nil
- i.v = v
- var last, lastnext *itemCanvasObject
- for {
- last = loadCanvasObjectItem(&q.tail)
- lastnext = loadCanvasObjectItem(&last.next)
- if loadCanvasObjectItem(&q.tail) == last {
- if lastnext == nil {
- if casCanvasObjectItem(&last.next, lastnext, i) {
- casCanvasObjectItem(&q.tail, last, i)
- atomic.AddUint64(&q.len, 1)
- return
- }
- } else {
- casCanvasObjectItem(&q.tail, last, lastnext)
- }
- }
- }
- }
- // Out removes and returns the value at the head of the queue.
- // It returns nil if the queue is empty.
- func (q *CanvasObjectQueue) Out() fyne.CanvasObject {
- var first, last, firstnext *itemCanvasObject
- for {
- first = loadCanvasObjectItem(&q.head)
- last = loadCanvasObjectItem(&q.tail)
- firstnext = loadCanvasObjectItem(&first.next)
- if first == loadCanvasObjectItem(&q.head) {
- if first == last {
- if firstnext == nil {
- return nil
- }
- casCanvasObjectItem(&q.tail, last, firstnext)
- } else {
- v := firstnext.v
- if casCanvasObjectItem(&q.head, first, firstnext) {
- atomic.AddUint64(&q.len, ^uint64(0))
- itemCanvasObjectPool.Put(first)
- return v
- }
- }
- }
- }
- }
- // Len returns the length of the queue.
- func (q *CanvasObjectQueue) Len() uint64 {
- return atomic.LoadUint64(&q.len)
- }
|