@@ -59,20 +59,27 @@ _to1(::Tuple{Base.OneTo,Vararg{Base.OneTo}}, x) = x
5959_to1 (:: Tuple , x) =  copy1 (eltype (x), x)
6060
6161#  Abstract FFT Backend
62- export  AbstractFFTBackend
62+ export  AbstractFFTBackend, fft_backend 
6363abstract type  AbstractFFTBackend end 
64- const  ACTIVE_BACKEND =  Ref {Union{Missing, AbstractFFTBackend}} (missing )
64+ struct  BackendReference
65+     ref:: Ref{Union{Missing, AbstractFFTBackend}} 
66+     BackendReference (val:: Union{Missing, AbstractFFTBackend} ) =  new (Ref {Union{Missing, AbstractFFTBackend}} (val))
67+ end 
68+ Base. setindex! (ref:: BackendReference , val:: Union{Missing, AbstractFFTBackend} ) =  ref. ref[] =  val
69+ Base. setindex! (ref:: BackendReference , val:: Module ) =  setindex! (ref, val. backend ())
70+ Base. getindex (ref:: BackendReference ) =  getindex (ref. ref)
71+ Base. convert (BackendReference, val:: AbstractFFTBackend ) =  BackendReference (val)
72+ const  fft_backend =  ScopedValue (BackendReference (missing ))
6573
6674""" 
6775    set_active_backend!(back::Union{Missing, Module, AbstractFFTBackend}) 
6876
6977Set the default FFT plan backend. A module `back` must implement `back.backend()`. 
7078""" 
71- set_active_backend! (back:: Module ) =  set_active_backend! (back. backend ())
72- function  set_active_backend! (back:: Union{Missing, AbstractFFTBackend} )
73-   ACTIVE_BACKEND[] =  back
79+ function  set_active_backend! (back:: Union{Missing, AbstractFFTBackend, Module} )
80+   fft_backend[][] =  back
7481end 
75- active_backend () =  ACTIVE_BACKEND []
82+ active_backend () =  fft_backend[] []
7683function  no_backend_error () 
7784  error (
7885    """ 
0 commit comments