package Ġcom . dv per my ak ov . rx . operators . transform ing Ċ Ċ import Ġcom . dv per my ak ov . rx . functions . Observable Map Function Ċ import Ġcom . dv per my ak ov . rx . observable s . Observable Ċ import Ġcom . dv per my ak ov . rx . ob servers . Observer Ċ import Ġcom . dv per my ak ov . rx . ob servers . Observer . State Ċ Ċ class ĠSwitch Map Observable < T , ĠR >( ĊĠĠĠ Ġprivate Ġval Ġobservable : ĠObservable < T >, ĊĠĠĠ Ġprivate Ġval Ġmapping : ĠObservable Map Function < T , ĠR > Ċ ) Ġ: ĠObservable < R >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe Actual ( observer : ĠObserver < R >) Ġ{ ĊĠĠĠĠĠĠĠ Ġobservable . subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSwitch Map Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSwitch Map Observer < T , ĠR >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġobserver : ĠObserver < R >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmapping : ĠObservable Map Function < T , ĠR > ĊĠĠĠ Ġ) Ġ: ĠObserver < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmain State : ĠState Ġ= ĠState . Idle ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Observable : ĠSwitch Map Inner Observer < R >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain State Ġ= ĠState . Sub scribed ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main State Ġis ĠState . Sub scribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Observable ?. is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠSwitch Map Inner Observer ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Observable Ġ= Ġobserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping . map ( item ). subscribe ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain State Ġ= ĠState . Completed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Observable ?. is Completed Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onError ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtry To Complete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main State Ġis ĠState . Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠSwitch Map Inner Observer < R >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġobserver : ĠObserver < R > ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠObserver < R > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Cancelled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Completed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( item : ĠR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onNext ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Completed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Switch Map Observer . try To Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Switch Map Observer . onError ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }