queue_unsafe_canvasobject.go 988 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Code generated by go run gen.go; DO NOT EDIT.
  2. //go:build !js
  3. // +build !js
  4. package async
  5. import (
  6. "sync/atomic"
  7. "unsafe"
  8. "fyne.io/fyne/v2"
  9. )
  10. // CanvasObjectQueue implements lock-free FIFO freelist based queue.
  11. //
  12. // Reference: https://dl.acm.org/citation.cfm?doid=248052.248106
  13. type CanvasObjectQueue struct {
  14. head unsafe.Pointer
  15. tail unsafe.Pointer
  16. len uint64
  17. }
  18. // NewCanvasObjectQueue returns a queue for caching values.
  19. func NewCanvasObjectQueue() *CanvasObjectQueue {
  20. head := &itemCanvasObject{next: nil, v: nil}
  21. return &CanvasObjectQueue{
  22. tail: unsafe.Pointer(head),
  23. head: unsafe.Pointer(head),
  24. }
  25. }
  26. type itemCanvasObject struct {
  27. next unsafe.Pointer
  28. v fyne.CanvasObject
  29. }
  30. func loadCanvasObjectItem(p *unsafe.Pointer) *itemCanvasObject {
  31. return (*itemCanvasObject)(atomic.LoadPointer(p))
  32. }
  33. func casCanvasObjectItem(p *unsafe.Pointer, old, new *itemCanvasObject) bool {
  34. return atomic.CompareAndSwapPointer(p, unsafe.Pointer(old), unsafe.Pointer(new))
  35. }