package Ġorg . jetbrains . sk iko Ċ Ċ import Ġkotlinx . c interop . interpret CP o inter Ċ import Ġkotlinx . coroutines .* Ċ import Ġplatform . Core Foundation .* Ċ import Ġplatform . darwin . dispatch _ async Ċ import Ġplatform . darwin . dispatch _ get _ global _ queue Ċ import Ġplatform . darwin . dispatch _ get _ main _ queue Ċ import Ġplatform . darwin . dispatch _ queue _ t Ċ import Ġplatform . posix . Q OS _ CLASS _ BACKGROUND Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . native . concurrent . Atomic Native Ptr Ċ import Ġkotlin . native . concurrent . freeze Ċ import Ġkotlin . native . internal . Native Ptr Ċ Ċ // ĠThis Ġis Ġthe Ġonly Ġdispatcher Ġthat Ġshall Ġbe Ġused Ġin ĠSk iko Ġon ĠiOS . Ċ // ĠCurrent Ġ( as Ġof Ġ 1 . 5 . 2 ) Ġdispatch ers Ġin Ġkotlinx . coroutines Ġare Ġnot Ġusable Ċ // Ġfor Ġneeds Ġof ĠSk iko . Ċ object ĠSk iko Dispatch ers Ġ{ ĊĠĠĠ Ġval ĠMain : ĠCor outine Dispatcher Ġ= ĠN s Queue Dispatcher ( dispatch _ get _ main _ queue ()) ĊĠĠĠ Ġval ĠIO : ĠCor outine Dispatcher Ġ= ĠN s Queue Dispatcher ( ĊĠĠĠĠĠĠĠ Ġdispatch _ get _ global _ queue ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ OS _ CLASS _ BACKGROUND . to Long (), Ġ 0 ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Opt In ( Internal Cor outines Api :: class ) Ċ internal Ġclass ĠN s Queue Dispatcher ( ĊĠĠĠ Ġprivate Ġval Ġdispatch Queue : Ġdispatch _ queue _ t Ċ ) Ġ: ĠCor outine Dispatcher (), ĠDelay Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdispatch ( context : ĠCor outine Context , Ġblock : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatch _ async ( dispatch Queue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . run () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġschedule Resume After Delay ( time Millis : ĠLong , Ġcontinuation : ĠC ancellable Continuation < Unit >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠTimer () ĊĠĠĠĠĠĠĠ Ġval Ġtimer Block : ĠTimer Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( Unit ) Ġ{ Ġt Ġ-> Ġt . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtimer . start ( time Millis , Ġtimer Block ) ĊĠĠĠĠĠĠĠ Ġcontinuation . dispose On Cancellation ( timer ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Opt In ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġinvoke On Timeout ( time Millis : ĠLong , Ġblock : ĠRunnable , Ġcontext : ĠCor outine Context ): ĠDis posable Handle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠTimer () ĊĠĠĠĠĠĠĠ Ġval Ġtimer Block : ĠTimer Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . run () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtimer . start ( time Millis , Ġtimer Block ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtimer ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġtype alias ĠTimer Block Ġ= Ġ( CF Run Loop Timer Ref ?) Ġ-> ĠUnit Ċ Ċ @ Shared Immutable Ċ private Ġval ĠTIMER _ NEW Ġ= ĠNative Ptr . NULL Ċ Ċ @ Shared Immutable Ċ private Ġval ĠTIMER _ DIS POSE D Ġ= ĠNative Ptr . NULL . plus ( 1 ) Ċ Ċ private Ġclass ĠTimer Ġ: ĠDis posable Handle Ġ{ ĊĠĠĠ Ġprivate Ġval Ġref Ġ= ĠAtomic Native Ptr ( TIMER _ NEW ) ĊĊĠĠĠ Ġinit Ġ{ Ġfreeze () Ġ} ĊĊĠĠĠ Ġfun Ġstart ( time Millis : ĠLong , Ġtimer Block : ĠTimer Block ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfire Date Ġ= ĠC FA b solute Time GetCurrent () Ġ+ Ġtime Millis Ġ/ Ġ 1 0 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ UNSIGNED _ LITERAL S ") ĊĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠCF Run Loop Timer Create With Handler ( null , Ġfire Date , Ġ 0 . 0 , Ġ 0 u , Ġ 0 , Ġtimer Block ) !! ĊĠĠĠĠĠĠĠ ĠCF Run Loop Add Timer ( CF Run Loop Get Main (), Ġtimer , Ġk CF Run Loop Common Modes ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! ref . compare AndSet ( TIMER _ NEW , Ġtimer . raw Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdispose Ġwas Ġalready Ġcalled Ġconcurrent ly ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease ( timer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġptr Ġ= Ġref . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ptr Ġ== ĠTIMER _ DIS POSE D ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref . compare AndSet ( ptr , ĠTIMER _ DIS POSE D )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ptr Ġ!= ĠTIMER _ NEW ) Ġrelease ( interpret CP o inter ( ptr )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease ( timer : ĠCF Run Loop Timer Ref ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠCF Run Loop Remove Timer ( CF Run Loop Get Main (), Ġtimer , Ġk CF Run Loop Common Modes ) ĊĠĠĠĠĠĠĠ ĠCF Release ( timer ) ĊĠĠĠ Ġ} Ċ } ĊĊ