import Ġkotlin . coroutines . experimental .* Ċ import Ġkotlin . coroutines . experimental . intr insics .* Ċ class ĠPromise < T >( private Ġval Ġexecutor : Ġ(( T ) Ġ-> ĠUnit ) Ġ-> ĠUnit ) Ġ{ ĊĊ Ġprivate Ġvar Ġvalue : ĠAny ? Ġ= Ġnull Ċ Ġprivate Ġvar Ġthen List : ĠMutable List <( T ) Ġ-> ĠUnit >? Ġ= Ġmutable ListOf () ĊĊ Ġinit Ġ{ Ċ Ġexecutor Ġ{ Ċ Ġvalue Ġ= Ġit Ċ Ġfor Ġ( resolve Ġin Ġthen List !! ) Ġ{ Ċ Ġresolve ( it ) Ċ Ġ} Ċ Ġthen List Ġ= Ġnull Ċ Ġ} Ċ Ġ} ĊĊ Ġfun Ġ< S > Ġthen ( on Ful filled : Ġ( T ) Ġ-> ĠS ): ĠPromise < S > Ġ{ Ċ Ġreturn ĠPromise Ġ{ Ġresolve Ġ-> Ċ Ġif Ġ( then List Ġ!= Ġnull ) Ġ{ Ċ Ġthen List !!. add Ġ{ Ġresolve ( on Ful filled ( it )) Ġ} Ċ Ġ} Ċ Ġelse Ġ{ Ċ Ġresolve ( on Ful filled ( value Ġas ĠT )) Ċ Ġ} Ċ Ġ} Ċ Ġ} Ċ } Ċ Ċ // ĠFILE : Ġqueue . kt Ċ } Ċ val Ġqueue Ġ= Ġmutable ListOf < (() Ġ-> ĠUnit ) >() Ċ fun Ġ< T > Ġpost p one ( computation : Ġ(() Ġ-> Ġ( T )? )): ĠPromise < T > Ġ{ Ċ return ĠPromise (( if Ġ( true ) Ġ{ Ċ ({ resolve Ġ-> Ġqueue Ġ+= Ġ{ resolve ( computation ()) }}) Ċ } Ġelse Ġ{ Ċ ({ resolve Ġ-> Ġqueue Ġ+= Ġ{ resolve ( computation ()) }}) Ċ })) Ċ } Ċ fun Ġprocess Queue (): ĠUnit Ġ{ Ċ while Ġ( queue . isNotEmpty ()) Ġ{ Ċ queue . remove At ( 0 )() Ċ } Ċ }