/* ĊĊĠĠ ĠCopyright Ġ 2 0 1 5 ĠAnd reas ĠW Ã¼ rl ĊĊĠĠ Ġ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 Ġorg . bl itz ort ung . android . protocol Ċ Ċ import Ġjava . util .* Ċ Ċ open Ġclass ĠConsumer Container < P > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconsumers : ĠMutable Set <( P ) Ġ-> ĠUnit > ĊĊĠĠĠ Ġvar Ġcurrent Payload : ĠP ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumers Ġ= ĠHashSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġadd Consumer ( consumer : Ġ(( P ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( consumer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" consumer Ġmay Ġnot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( consum ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! consum ers . contains ( consumer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis First Ġ= Ġconsumers . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumers . add ( consumer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded First Consumer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsend Current Payload To ( consumer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsend Current Payload To ( consumer : Ġ( P ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Payload ?. let Ġ{ Ġcurrent Payload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer . invoke ( current Payload ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Consumer ( consumer : Ġ( P ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( consum ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consum ers . contains ( consumer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumers . remove ( consumer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consum ers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremoved Last Consumer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġadded First Consumer () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġremoved Last Consumer () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstore And Broadcast ( payload : ĠP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Payload Ġ= Ġpayload ĊĠĠĠĠĠĠĠ Ġbroadcast ( payload ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbroadcast ( payload : ĠP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( consumer Ġin Ġconsumers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer . invoke ( payload ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġconsumers . isEmpty () ĊĊĠĠĠ Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġconsumers . size Ċ } Ċ