package Ġcom . next gen broadcast . mobile . tv android . utils Ċ Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . lifecycle .* Ċ Ċ @ MainThread Ċ inline Ġfun Ġ< X , ĠY , ĠR > Ġmap Pair ( source A : ĠLive Data < X >, Ġsource B : ĠLive Data < Y >, Ġcross inline Ġmap Function : Ġ( Pair < X ?, ĠY ?> ) Ġ-> ĠR ): ĠLive Data < R > Ġ{ ĊĠĠĠ Ġval Ġlast X Ġ= ĠVariable < X >() ĊĠĠĠ Ġval Ġlast Y Ġ= ĠVariable < Y >() ĊĠĠĠ Ġreturn ĠMed iator LiveData < R >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Source ( source A ) Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast X . value Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( map Function ( Pair ( x , Ġlast Y . value ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( source B ) Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y . value Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( map Function ( Pair ( last X . value , Ġy ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ MainThread Ċ inline Ġfun Ġ< X , ĠY , ĠZ , ĠR > Ġmap Triple ( source A : ĠLive Data < X >, Ġsource B : ĠLive Data < Y >, Ġsource C : ĠLive Data < Z >, Ġcross inline Ġmap Function : Ġ( Triple < X ?, ĠY ?, ĠZ ?> ) Ġ-> ĠR ): ĠLive Data < R > Ġ{ ĊĠĠĠ Ġval Ġlast X Ġ= ĠVariable < X >() ĊĠĠĠ Ġval Ġlast Y Ġ= ĠVariable < Y >() ĊĠĠĠ Ġval Ġlast Z Ġ= ĠVariable < Z >() ĊĠĠĠ Ġreturn ĠMed iator LiveData < R >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Source ( source A ) Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast X . value Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( map Function ( Triple ( x , Ġlast Y . value , Ġlast Z . value ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( source B ) Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y . value Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( map Function ( Triple ( last X . value , Ġy , Ġlast Z . value ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( source C ) Ġ{ Ġz Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Z . value Ġ= Ġz ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( map Function ( Triple ( last X . value , Ġlast Y . value , Ġz ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠVariable < T > Ġ{ ĊĠĠĠ Ġvar Ġvalue : ĠT ? Ġ= Ġnull Ċ } Ċ Ċ inline Ġfun Ġ< X , ĠY , ĠR > ĠLive Data < X >. map With ( second : ĠLive Data < Y >, Ġcross inline Ġtransform : Ġ( Pair < X ?, ĠY ?> ) Ġ-> ĠR ): ĠLive Data < R > Ġ= ĊĠĠĠĠĠĠĠ Ġmap Pair ( this , Ġsecond ) Ġ{ Ġtransform ( it ) Ġ} Ċ Ċ inline Ġfun Ġ< X , ĠY , ĠZ , ĠR > ĠLive Data < X >. map With ( second : ĠLive Data < Y >, Ġthird : ĠLive Data < Z >, Ġcross inline Ġtransform : Ġ( Triple < X ?, ĠY ?, ĠZ ?> ) Ġ-> ĠR ): ĠLive Data < R > Ġ= ĊĠĠĠĠĠĠĠ Ġmap Triple ( this , Ġsecond , Ġthird ) Ġ{ Ġtransform ( it ) Ġ} Ċ Ċ fun Ġ< X , ĠY > ĠLive Data < X >. un ite ( second : ĠLive Data < Y >): ĠLive Data < Pair < X ?, ĠY ? >> Ġ= ĊĠĠĠĠĠĠĠ Ġmap Pair ( this , Ġsecond ) Ġ{ Ġit Ġ} Ċ Ċ fun Ġ< X , ĠY , ĠZ > ĠLive Data < X >. un ite ( second : ĠLive Data < Y >, Ġthird : ĠLive Data < Z >): ĠLive Data < Triple < X ?, ĠY ?, ĠZ ? >> Ġ= ĊĠĠĠĠĠĠĠ Ġmap Triple ( this , Ġsecond , Ġthird ) Ġ{ Ġit Ġ} Ċ