/* Ċ Ġ* Ġ- \- \- Ċ Ġ* Ġ-- Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - 2 0 1 8 ĠSpotify ĠAB Ċ Ġ* Ġ-- Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ- /- /- Ċ Ġ*/ Ċ package Ġdev . sun ny day . core . m vi . spotify Ċ Ċ import Ġcom . spotify . mob ius .* Ċ import Ġcom . spotify . mob ius . functions . Consumer Ċ import Ġcom . spotify . mob ius . rx 2 . Rx Mob ius Ċ import Ġio . reactivex . Observable Transformer Ċ Ċ private Ġfun Ġ< M , ĠE , ĠF > Ġupdate Wrapper ( update : Ġ( M , ĠE ) Ġ-> ĠNext < M , ĠF >): ĠUpdate < M , ĠE , ĠF > Ġ= ĊĠĠĠĠĠĠĠ ĠUpdate Ġ{ Ġm : ĠM , Ġe : ĠE Ġ-> Ġupdate ( m , Ġe ) Ġ} Ċ Ċ fun Ġ< M , ĠE , ĠF > Ġloop Factory ( ĊĠĠĠĠĠĠĠ Ġupdate : Ġ( M , ĠE ) Ġ-> ĠNext < M , ĠF >, ĊĠĠĠĠĠĠĠ Ġeffect Handlers : ĠObservable Transformer < F , ĠE > Ċ ) Ġ= ĠRx Mob ius . loop ( update Wrapper ( update ), Ġeffect Handlers ) Ċ Ċ class ĠPartial Connection < T >( val Ġon Model Change : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfun Ġon Dispose ( dispose : Ġ() Ġ-> ĠUnit ): ĠConnection < T > Ġ= Ġobject Ġ: ĠConnection < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaccept ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Model Change ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > Ġon Accept ( on Model Change : Ġ( T ) Ġ-> ĠUnit ): ĠPartial Connection < T > Ġ= ĊĠĠĠĠĠĠĠ ĠPartial Connection ( on Model Change ) Ċ Ċ fun Ġ< I , ĠJ , ĠO > ĠConnect able < I , ĠO >. contr amap ( block : Ġ( J ) Ġ-> ĠI ) Ġ= ĠContr amap Connect able ( block , Ġthis ) Ċ Ċ class ĠContr amap Connect able < I , ĠJ , ĠO > Ġ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap : Ġ( J ) Ġ-> ĠI , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdelegate : ĠConnect able < I , ĠO >) Ġ: ĠConnect able < J , ĠO > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġconnect ( output : ĠConsumer < O >): ĠConnection < J > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdelegate . connect ( output ) ĊĠĠĠĠĠĠĠ Ġreturn Ġon Accept < J > Ġ{ Ġconnection . accept ( map ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Dispose Ġ{ Ġconnection . dispose () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< M , ĠF > ĠNext < M , ĠF >. change Model ( change : Ġ( current : ĠM ?) Ġ-> ĠM ?): ĠNext < M , ĠF > Ġ{ ĊĊĠĠĠ Ġval Ġmodel Ġ= Ġif Ġ( has Model ()) Ġchange ( model Unsafe ()) Ġelse Ġchange ( null ) ĊĠĠĠ Ġval Ġeffects Ġ= Ġeffects () ĊĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel Ġ!= Ġnull Ġ-> ĠNext . next ( model , Ġeffects ) ĊĠĠĠĠĠĠĠ Ġeffects . isNotEmpty () Ġ-> ĠNext . dispatch ( effects ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNext . no Change () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ inline Ġfun Ġ< M , ĠF > ĠNext < M , ĠF >. change Effects ( change : Ġ( Set < F >) Ġ-> ĠSet < F >): ĠNext < M , ĠF > Ġ{ ĊĊĠĠĠ Ġval Ġeffects Ġ= Ġchange ( effects ()) ĊĠĠĠ Ġval Ġmodel Ġ= Ġif Ġ( has Model ()) Ġmodel Unsafe () Ġelse Ġnull ĊĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel Ġ!= Ġnull Ġ-> ĠNext . next ( model , Ġeffects ) ĊĠĠĠĠĠĠĠ Ġeffects . isNotEmpty () Ġ-> ĠNext . dispatch ( effects ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNext . no Change () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠE : ĠAny > Ġeffects ( var arg Ġeffects : ĠE ): ĠSet < E > Ġ{ ĊĠĠĠ Ġreturn Ġcom . spotify . mob ius . Effects . effects (* effects ) Ċ } Ċ Ċ @ Jvm Name (" effect sWith out Null s ") Ċ inline Ġfun Ġ< re ified ĠE : ĠAny > Ġeffects ( var arg Ġeffects : ĠE ?): ĠSet < E > Ġ{ ĊĠĠĠ Ġreturn Ġeffects (* effects . filter NotNull (). to Typed Array ()) Ċ }