package Ġcom . bad oo . reak t ive . scheduler Ċ Ċ import Ġcom . bad oo . reak t ive . dis posable . Composite Disposable Ċ import Ġcom . bad oo . reak t ive . lo oper thread . Looper Thread Strategy Ċ import Ġkotlin . native . concurrent . Atomic Int Ċ import Ġkotlin . system . getTime Millis Ċ Ċ internal Ġclass ĠScheduler Impl ( ĊĠĠĠ Ġprivate Ġval Ġlo oper Thread Strategy : ĠL ooper Thread Strategy Ċ ) Ġ: ĠScheduler Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġoverride Ġfun Ġnew Executor (): ĠScheduler . Executor Ġ= ĊĠĠĠĠĠĠĠ ĠExecutor Impl ( lo oper Thread Strategy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also ( dis pos ables :: add ) ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . dispose () ĊĠĠĠĠĠĠĠ Ġlo oper Thread Strategy . destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠExecutor Impl ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlo oper Thread Strategy : ĠL ooper Thread Strategy ĊĠĠĠ Ġ) Ġ: ĠScheduler . Executor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlo oper Thread Ġ= Ġlo oper Thread Strategy . get () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ is Disposed Ġ= ĠAtomic Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġis Disposed : ĠBoolean Ġget () Ġ= Ġ_ is Disposed . value Ġ!= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Disposed . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo oper Thread Strategy . recycle ( lo oper Thread ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubmit ( delay Millis : ĠLong , Ġtask : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo oper Thread . schedule ( this , Ġget StartTime Millis ( delay Millis ), Ġtask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubmit Repe ating ( start Delay Millis : ĠLong , Ġperiod Millis : ĠLong , Ġtask : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġt : Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext StartTime Millis Ġ= Ġget StartTime Millis ( period Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo oper Thread . schedule ( this , Ġnext StartTime Millis , Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo oper Thread . schedule ( this , Ġget StartTime Millis ( start Delay Millis ), Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo oper Thread . cancel ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget StartTime Millis ( delay Millis : ĠLong ): ĠLong Ġ= ĠgetTime Millis () Ġ+ Ġdelay Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }