/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠThe ĠReact - kt ĠAuthors Ċ Ġ* Ċ Ġ* Ġ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 Ġreact Ċ Ċ /** Ċ Ġ* ĠProvides Ġutility Ġmethods Ġfor Ġ[ Value ] s . Ċ Ġ*/ Ċ object ĠValues Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġreactive Ġvalue Ġwhich Ġis Ġtriggered Ġwhen Ġeither Ġof Ġ` a , Ġb ` Ġemits Ġan Ġevent . ĠThe ĊĠĠĠĠ Ġ* Ġmapped Ġvalue Ġwill Ġretain Ġconnections Ġto Ġ` a + b ` Ġonly Ġwhile Ġit Ġitself Ġhas Ġconnections . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A , ĠB > Ġjoin ( a : ĠValue View < A >, Ġb : ĠValue View < B >): ĠValue View < Pair < A , ĠB >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠM apped Value < Pair < A , ĠB >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠPair < A , ĠB > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconnect (): ĠConnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConnection . join ( a . connect (_ trigger ), Ġb . connect (_ trigger )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġval Ġ_ trigger : ĠUnit Slot Ġ= Ġ{ Ġ_: ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo value Ġ= Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Ġ= ĠPair ( a . get (), Ġb . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Change (_ current , Ġo value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġvar Ġ_ current Ġ= ĠPair ( a . get (), Ġb . get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġreactive Ġvalue Ġwhich Ġis Ġtriggered Ġwhen Ġeither Ġof Ġ` a , Ġb , Ġc ` Ġemits Ġan Ġevent . ĊĠĠĠĠ Ġ* ĠThe Ġmapped Ġvalue Ġwill Ġretain Ġconnections Ġto Ġ` a + b + c ` Ġonly Ġwhile Ġit Ġitself Ġhas ĊĠĠĠĠ Ġ* Ġconnections . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A , ĠB , ĠC > Ġjoin ( a : ĠValue View < A >, Ġb : ĠValue View < B >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc : ĠValue View < C >): ĠValue View < Triple < A , ĠB , ĠC >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠM apped Value < Triple < A , ĠB , ĠC >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠTrip le < A , ĠB , ĠC > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconnect (): ĠConnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConnection . join ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . connect (_ trigger ), Ġb . connect (_ trigger ), Ġc . connect (_ trigger )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġval Ġ_ trigger : ĠUnit Slot Ġ= Ġ{ Ġ_: ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo value Ġ= Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Ġ= ĠTrip le ( a . get (), Ġb . get (), Ġc . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Change (_ current , Ġo value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġvar Ġ_ current Ġ= ĠTrip le ( a . get (), Ġb . get (), Ġc . get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġboolean Ġvalue Ġthat Ġis Ġtoggle d Ġevery Ġtime Ġthe Ġsupplied Ġsignal Ġfires . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsignal Ġthe Ġsignal Ġthat Ġwill Ġtrigger Ġthe Ġto g gling . ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Ġthe Ġinitial Ġvalue Ġof Ġthe Ġto Ġbe Ġtoggle d Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto ggler ( signal : ĠSignal View <* >, Ġinitial : ĠBoolean ): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠM apped Value < Boolean >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconnect (): ĠConnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsignal . connect ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Ġ= Ġ! old ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Change (_ current , Ġold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġvar Ġ_ current Ġ= Ġinitial ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠNOT Ġof Ġthe Ġsupplied Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnot ( value : ĠValue View < Boolean >): ĠValue View < Boolean > Ġ= Ġvalue . map Ġ{ Ġ! it Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠAND Ġof Ġthe Ġsupplied Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġand ( one : ĠValue View < Boolean >, Ġtwo : ĠValue View < Boolean >): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġand ( listOf ( one , Ġtwo )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠAND Ġof Ġthe Ġsupplied Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġand ( var arg Ġvalues : ĠValue View < Boolean >): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġand ( values . asList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠAND Ġof Ġthe Ġsupplied Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġand ( values : ĠCollection < Value View < Boolean >> ): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġagg Value ( values , Ġ{ Ġv Ġ-> Ġv . all Ġ{ Ġit . get () Ġ} Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠOR Ġof Ġthe Ġsupplied Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġor ( one : ĠValue View < Boolean >, Ġtwo : ĠValue View < Boolean >): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġor ( listOf ( one , Ġtwo )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠOR Ġof Ġthe Ġsupplied Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġor ( var arg Ġvalues : ĠValue View < Boolean >): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġor ( values . asList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġvalue Ġwhich Ġis Ġthe Ġlogical ĠOR Ġof Ġthe Ġsupplied Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġor ( values : ĠCollection < Value View < Boolean >> ): ĠValue View < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġagg Value ( values , Ġ{ Ġv Ġ-> Ġv . any Ġ{ Ġit . get () Ġ} Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġview Ġof Ġthe Ġsupplied Ġsignal Ġas Ġa Ġvalue . ĠIt Ġwill Ġcontain Ġthe Ġvalue Ġ` initial ` ĊĠĠĠĠ Ġ* Ġuntil Ġthe Ġsignal Ġfires , Ġat Ġwhich Ġtime Ġthe Ġvalue Ġwill Ġbe Ġupdated Ġwith Ġthe Ġemitted Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġas Value ( signal : ĠSignal View < T >, Ġinitial : ĠT ): ĠValue View < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠM apped Value < T >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Local ( value : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo value Ġ= Ġ_ value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ value Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġo value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconnect (): ĠConnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsignal . connect ({ Ġvalue : ĠT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate And Notify If ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġvar Ġ_ value Ġ= Ġinitial ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġagg Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues : ĠCollection < Value View < Boolean >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagg Op : Ġ( Iterable < Value View < Boolean >>) Ġ-> ĠBoolean ): ĠValue View < Boolean > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠM apped Value < Boolean >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġagg Op . invoke ( values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconnect (): ĠConnection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcon ns Ġ= ĠarrayOf Null s < Connection >( values . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiter Ġ= Ġvalues . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ_ current : ĠBoolean Ġ= Ġagg Op . invoke ( values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ii Ġin Ġcon ns . indices ) Ġcon ns [ ii ] Ġ= Ġiter . next (). connect ({ Ġ_: ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo value Ġ= Ġ_ current ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Ġ= Ġagg Op . invoke ( values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Change (_ current , Ġo value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConnection . join (* con ns Ġas ĠArray < Connection >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ