package Ġdev team . rx Ċ Ċ fun Ġ< T > Ġsubject Of (): ĠSubject < T > Ġ= Ġobject Ġ: ĠSubject < T > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġob servers : ĠMutable List < Observer < T >> Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġis Completed : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( observer : ĠObserver < T >): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ synchronized ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . add ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdis posable Of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . remove ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Next ( value : ĠT ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onNext ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠException ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( ob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġob servers . clear () ĊĠĠĠĠĠĠĠ Ġis Completed Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > Ġempty Subject (): ĠSubject < T > Ġ= Ġobject Ġ: ĠSubject < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( observer : ĠObserver < T >): ĠDis posable Ġ= Ġempty Disposable () ĊĠĠĠ Ġoverride Ġfun Ġon Next ( value : ĠT ) Ġ= ĠUnit ĊĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠException ) Ġ= ĠUnit ĊĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ= ĠUnit Ċ }