/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" FunctionName ") Ċ Ċ package Ġcor outines . channels Ċ Ċ import Ġcor outines . channels . Channel . Factory . BUFFER ED Ċ import Ġcor outines . channels . Channel . Factory . UN LIMIT ED Ċ import Ġjava . util . concurrent . Cancellation Exception Ċ Ċ internal Ġconst Ġval ĠDEFAULT _ CLOSE _ MESSAGE Ġ= Ġ" Channel Ġwas Ġclosed " Ċ Ċ /** Ċ Ġ* ĠSender 's Ġinterface Ġto Ġ[ Channel ]. Ċ Ġ*/ Ċ public Ġinterface ĠSend Channel < in ĠE > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġchannel Ġwas Ġclosed Ġby Ġan Ġinvocation Ġof Ġ[ close ]. ĠThis Ġmeans Ġthat ĊĠĠĠĠ Ġ* Ġcalling Ġ[ send ] Ġor Ġ[ offer ] Ġwill Ġresult Ġin Ġan Ġexception . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** Note : ĠThis Ġis Ġan Ġexperimental Ġapi .** ĠThis Ġproperty Ġmay Ġchange Ġits Ġsemantics Ġand / or Ġname Ġin Ġthe Ġfuture . ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġpublic Ġval Ġis Closed For Send : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġthe Ġspecified Ġ[ element ] Ġto Ġthis Ġchannel , Ġsus pending Ġthe Ġcaller Ġwhile Ġthe Ġbuffer Ġof Ġthis Ġchannel Ġis Ġfull ĊĠĠĠĠ Ġ* Ġor Ġif Ġit Ġdoes Ġnot Ġexist , Ġor Ġthrows Ġan Ġexception Ġif Ġthe Ġchannel Ġ[ is Ġclosed Ġfor Ġ` send `][ is Closed For Send ] Ġ( see Ġ[ close ] Ġfor Ġdetails ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġclosing Ġa Ġchannel Ġ_ after _ Ġthis Ġfunction Ġhas Ġsus pended Ġdoes Ġnot Ġcause Ġthis Ġsus pended Ġ[ send ] Ġinvocation ĊĠĠĠĠ Ġ* Ġto Ġabort , Ġbecause Ġclosing Ġa Ġchannel Ġis Ġconcept ually Ġlike Ġsending Ġa Ġspecial Ġ" close Ġtoken " Ġover Ġthis Ġchannel . ĊĠĠĠĠ Ġ* ĠAll Ġelements Ġsent Ġover Ġthe Ġchannel Ġare Ġdelivered Ġin Ġfirst - in Ġfirst - out Ġorder . ĠThe Ġsent Ġelement ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġdelivered Ġto Ġreceiv ers Ġbefore Ġthe Ġclose Ġtoken . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġsus pending Ġfunction Ġis Ġcancell able . ĠIf Ġthe Ġ[ Job ] Ġof Ġthe Ġcurrent Ġcoroutine Ġis Ġcancelled Ġor Ġcompleted Ġwhile Ġthis ĊĠĠĠĠ Ġ* Ġfunction Ġis Ġsus pended , Ġthis Ġfunction Ġimmediately Ġresume s Ġwith Ġa Ġ[ Cancellation Exception ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ* Cancellation Ġof Ġsus pended Ġ` send ` Ġis Ġatomic *: Ġwhen Ġthis Ġfunction ĊĠĠĠĠ Ġ* Ġthrows Ġa Ġ[ Cancellation Exception ], Ġit Ġmeans Ġthat Ġthe Ġ[ element ] Ġwas Ġnot Ġsent Ġto Ġthis Ġchannel . ĊĠĠĠĠ Ġ* ĠAs Ġa Ġside - effect Ġof Ġatomic Ġcancellation , Ġa Ġthread - bound Ġcoroutine Ġ( to Ġsome ĠUI Ġthread , Ġfor Ġexample ) Ġmay ĊĠĠĠĠ Ġ* Ġcontinue Ġto Ġexecute Ġeven Ġafter Ġit Ġwas Ġcancelled Ġfrom Ġthe Ġsame Ġthread Ġin Ġthe Ġcase Ġwhen Ġthis Ġ` send ` Ġoperation ĊĠĠĠĠ Ġ* Ġwas Ġalready Ġres umed Ġand Ġthe Ġcontinuation Ġwas Ġposted Ġfor Ġexecution Ġto Ġthe Ġthread 's Ġqueue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġfunction Ġdoes Ġnot Ġcheck Ġfor Ġcancellation Ġwhen Ġit Ġis Ġnot Ġsus pended . ĊĠĠĠĠ Ġ* ĠUse Ġ[ yield ] Ġor Ġ[ Coroutine Scope . isActive ] Ġto Ġperiodically Ġcheck Ġfor Ġcancellation Ġin Ġtight Ġloops Ġif Ġneeded . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġcan Ġbe Ġused Ġin Ġ[ select ] Ġinv ocations Ġwith Ġthe Ġ[ on Send ] Ġclause . ĊĠĠĠĠ Ġ* ĠUse Ġ[ offer ] Ġto Ġtry Ġsending Ġto Ġthis Ġchannel Ġwithout Ġwaiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġsuspend Ġfun Ġsend ( element : ĠE ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIm mediate ly Ġadds Ġthe Ġspecified Ġ[ element ] Ġto Ġthis Ġchannel , Ġif Ġthis Ġdoesn 't Ġvi olate Ġits Ġcapacity Ġrestrictions , ĊĠĠĠĠ Ġ* Ġand Ġreturns Ġ` true `. ĠOtherwise , Ġjust Ġreturns Ġ` false `. ĠThis Ġis Ġa Ġsynchronous Ġvariant Ġof Ġ[ send ] Ġwhich Ġback s Ġoff ĊĠĠĠĠ Ġ* Ġin Ġsituations Ġwhen Ġ` send ` Ġsus p ends . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThrows Ġan Ġexception Ġif Ġthe Ġchannel Ġ[ is Ġclosed Ġfor Ġ` send `][ is Closed For Send ] Ġ( see Ġ[ close ] Ġfor Ġdetails ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġoffer ( element : ĠE ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġthis Ġchannel . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġan Ġide mpot ent Ġoperation Ġ& mdash ; Ġsubsequent Ġinv ocations Ġof Ġthis Ġfunction Ġhave Ġno Ġeffect Ġand Ġreturn Ġ` false `. ĊĠĠĠĠ Ġ* ĠConcept ually , Ġits Ġsends Ġa Ġspecial Ġ" close Ġtoken " Ġover Ġthis Ġchannel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIm mediate ly Ġafter Ġinvocation Ġof Ġthis Ġfunction , ĊĠĠĠĠ Ġ* Ġ[ is Closed For Send ] Ġstarts Ġreturning Ġ` true `. ĠHowever , Ġ[ is Closed For Receive ][ Receive Channel . is Closed For Receive ] ĊĠĠĠĠ Ġ* Ġon Ġthe Ġside Ġof Ġ[ Receive Channel ] Ġstarts Ġreturning Ġ` true ` Ġonly Ġafter Ġall Ġpreviously Ġsent Ġelements ĊĠĠĠĠ Ġ* Ġare Ġreceived . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġchannel Ġthat Ġwas Ġclosed Ġwithout Ġa Ġ[ cause ] Ġthrows Ġa Ġ[ Closed Send Channel Exception ] Ġon Ġattempts Ġto Ġ[ send ] Ġor Ġ[ offer ] ĊĠĠĠĠ Ġ* Ġand Ġ[ Closed Receive Channel Exception ] Ġon Ġattempts Ġto Ġ[ receive ][ Receive Channel . receive ]. ĊĠĠĠĠ Ġ* ĠA Ġchannel Ġthat Ġwas Ġclosed Ġwith Ġnon - null Ġ[ cause ] Ġis Ġcalled Ġa Ġ_ failed _ Ġchannel . ĠAt tempts Ġto Ġsend Ġor ĊĠĠĠĠ Ġ* Ġreceive Ġon Ġa Ġfailed Ġchannel Ġthrow Ġthe Ġspecified Ġ[ cause ] Ġexception . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġclose ( cause : ĠThrowable ? Ġ= Ġnull ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġa Ġ[ handler ] Ġwhich Ġis Ġsynchronous ly Ġinvoked Ġonce Ġthe Ġchannel Ġis Ġ[ closed ][ close ] ĊĠĠĠĠ Ġ* Ġor Ġthe Ġreceiving Ġside Ġof Ġthis Ġchannel Ġis Ġ[ cancelled ][ Receive Channel . cancel ]. ĊĠĠĠĠ Ġ* ĠOnly Ġone Ġhandler Ġcan Ġbe Ġattached Ġto Ġa Ġchannel Ġduring Ġits Ġlifetime . ĊĠĠĠĠ Ġ* ĠThe Ġ` handler ` Ġis Ġinvoked Ġwhen Ġ[ is Closed For Send ] Ġstarts Ġto Ġreturn Ġ` true `. ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġchannel Ġis Ġclosed Ġalready , Ġthe Ġhandler Ġis Ġinvoked Ġimmediately . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġmeaning Ġof Ġ` cause ` Ġthat Ġis Ġpassed Ġto Ġthe Ġhandler : ĊĠĠĠĠ Ġ* Ġ* Ġ` null ` Ġif Ġthe Ġchannel Ġwas Ġclosed Ġor Ġcancelled Ġwithout Ġthe Ġcorresponding Ġargument ĊĠĠĠĠ Ġ* Ġ* Ġthe Ġcause Ġof Ġ` close ` Ġor Ġ` cancel ` Ġotherwise . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample Ġof Ġusage Ġ( exception Ġhandling Ġis Ġomitted ): ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġevents Ġ= ĠChannel ( UN LIMIT ED ) ĊĠĠĠĠ Ġ* Ġcallback Based Api . register Callback Ġ{ Ġevent Ġ-> ĊĠĠĠĠ Ġ* ĠĠ Ġevents . offer ( event ) ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġui Updater Ġ= Ġlaunch ( Dispatch ers . Main , Ġparent Ġ= ĠU IL ifecycle ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠ Ġevents . consume Ġ{} ĊĠĠĠĠ Ġ* ĠĠĠ Ġevents . cancel () ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġevents . invoke On Close Ġ{ Ġcallback Based Api . stop () Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** Note : ĠThis Ġis Ġan Ġexperimental Ġapi .** ĠThis Ġfunction Ġmay Ġchange Ġits Ġsemantics , Ġparameters Ġor Ġreturn Ġtype Ġin Ġthe Ġfuture . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠUnsupportedOperationException Ġif Ġthe Ġunderlying Ġchannel Ġdoesn 't Ġsupport Ġ[ invoke On Close ]. ĊĠĠĠĠ Ġ* ĠImplementation Ġnote : Ġcurrently , Ġ[ invoke On Close ] Ġis Ġunsupported Ġonly Ġby ĠRx - like Ġintegr ations ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġanother Ġhandler Ġwas Ġalready Ġregistered ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġpublic Ġfun Ġinvoke On Close ( handler : Ġ( cause : ĠThrowable ?) Ġ-> ĠUnit ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReceiver 's Ġinterface Ġto Ġ[ Channel ]. Ċ Ġ*/ Ċ public Ġinterface ĠReceive Channel < out ĠE > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġchannel Ġwas Ġclosed Ġby Ġinvocation Ġof Ġ[ close ][ Send Channel . close ] Ġon Ġthe Ġ[ Send Channel ] ĊĠĠĠĠ Ġ* Ġside Ġand Ġall Ġpreviously Ġsent Ġitems Ġwere Ġalready Ġreceived . ĠThis Ġmeans Ġthat Ġcalling Ġ[ receive ] ĊĠĠĠĠ Ġ* Ġwill Ġresult Ġin Ġa Ġ[ Closed Receive Channel Exception ]. ĠIf Ġthe Ġchannel Ġwas Ġclosed Ġbecause Ġof Ġan Ġexception , Ġit ĊĠĠĠĠ Ġ* Ġis Ġconsidered Ġclosed , Ġtoo , Ġbut Ġis Ġcalled Ġa Ġ_ failed _ Ġchannel . ĠAll Ġsus pending Ġattempts Ġto Ġreceive ĊĠĠĠĠ Ġ* Ġan Ġelement Ġfrom Ġa Ġfailed Ġchannel Ġthrow Ġthe Ġoriginal Ġ[ close ][ Send Channel . close ] Ġcause Ġexception . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** Note : ĠThis Ġis Ġan Ġexperimental Ġapi .** ĠThis Ġproperty Ġmay Ġchange Ġits Ġsemantics Ġand / or Ġname Ġin Ġthe Ġfuture . ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġpublic Ġval Ġis Closed For Receive : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthe Ġchannel Ġis Ġempty Ġ( contains Ġno Ġelements ), Ġwhich Ġmeans Ġthat Ġan Ġattempt Ġto Ġ[ receive ] Ġwill Ġsuspend . ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġreturns Ġ` false ` Ġif Ġthe Ġchannel Ġ[ is Ġclosed Ġfor Ġ` receive `][ is Closed For Receive ]. ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġpublic Ġval ĠisEmpty : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġand Ġremoves Ġan Ġelement Ġfrom Ġthis Ġchannel Ġif Ġit 's Ġnot Ġempty , Ġor Ġsus p ends Ġthe Ġcaller Ġwhile Ġthe Ġchannel Ġis Ġempty , ĊĠĠĠĠ Ġ* Ġor Ġthrows Ġa Ġ[ Closed Receive Channel Exception ] Ġif Ġthe Ġchannel Ġ[ is Ġclosed Ġfor Ġ` receive `][ is Closed For Receive ]. ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġchannel Ġwas Ġclosed Ġbecause Ġof Ġan Ġexception , Ġit Ġis Ġcalled Ġa Ġ_ failed _ Ġchannel Ġand Ġthis Ġfunction ĊĠĠĠĠ Ġ* Ġwill Ġthrow Ġthe Ġoriginal Ġ[ close ][ Send Channel . close ] Ġcause Ġexception . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġsus pending Ġfunction Ġis Ġcancell able . ĠIf Ġthe Ġ[ Job ] Ġof Ġthe Ġcurrent Ġcoroutine Ġis Ġcancelled Ġor Ġcompleted Ġwhile Ġthis ĊĠĠĠĠ Ġ* Ġfunction Ġis Ġsus pended , Ġthis Ġfunction Ġimmediately Ġresume s Ġwith Ġa Ġ[ Cancellation Exception ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ* Cancellation Ġof Ġsus pended Ġ` receive ` Ġis Ġatomic *: Ġwhen Ġthis Ġfunction ĊĠĠĠĠ Ġ* Ġthrows Ġa Ġ[ Cancellation Exception ], Ġit Ġmeans Ġthat Ġthe Ġelement Ġwas Ġnot Ġretrieved Ġfrom Ġthis Ġchannel . ĊĠĠĠĠ Ġ* ĠAs Ġa Ġside - effect Ġof Ġatomic Ġcancellation , Ġa Ġthread - bound Ġcoroutine Ġ( to Ġsome ĠUI Ġthread , Ġfor Ġexample ) Ġmay ĊĠĠĠĠ Ġ* Ġcontinue Ġto Ġexecute Ġeven Ġafter Ġit Ġwas Ġcancelled Ġfrom Ġthe Ġsame Ġthread Ġin Ġthe Ġcase Ġwhen Ġthis Ġ` receive ` Ġoperation ĊĠĠĠĠ Ġ* Ġwas Ġalready Ġres umed Ġand Ġthe Ġcontinuation Ġwas Ġposted Ġfor Ġexecution Ġto Ġthe Ġthread 's Ġqueue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġfunction Ġdoes Ġnot Ġcheck Ġfor Ġcancellation Ġwhen Ġit Ġis Ġnot Ġsus pended . ĊĠĠĠĠ Ġ* ĠUse Ġ[ yield ] Ġor Ġ[ Coroutine Scope . isActive ] Ġto Ġperiodically Ġcheck Ġfor Ġcancellation Ġin Ġtight Ġloops Ġif Ġneeded . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġcan Ġbe Ġused Ġin Ġ[ select ] Ġinv ocations Ġwith Ġthe Ġ[ on Receive ] Ġclause . ĊĠĠĠĠ Ġ* ĠUse Ġ[ poll ] Ġto Ġtry Ġreceiving Ġfrom Ġthis Ġchannel Ġwithout Ġwaiting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġsuspend Ġfun Ġreceive (): ĠE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġand Ġremoves Ġan Ġelement Ġfrom Ġthis Ġchannel Ġif Ġit 's Ġnot Ġempty , Ġor Ġsus p ends Ġthe Ġcaller Ġwhile Ġthis Ġchannel Ġis Ġempty . ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġreturns Ġ[ Value Or Closed ] Ġwith Ġthe Ġvalue Ġof Ġan Ġelement Ġsuccessfully Ġretrieved Ġfrom Ġthe Ġchannel ĊĠĠĠĠ Ġ* Ġor Ġthe Ġclose Ġcause Ġif Ġthe Ġchannel Ġwas Ġclosed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġsus pending Ġfunction Ġis Ġcancell able . ĠIf Ġthe Ġ[ Job ] Ġof Ġthe Ġcurrent Ġcoroutine Ġis Ġcancelled Ġor Ġcompleted Ġwhile Ġthis ĊĠĠĠĠ Ġ* Ġfunction Ġis Ġsus pended , Ġthis Ġfunction Ġimmediately Ġresume s Ġwith Ġa Ġ[ Cancellation Exception ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ* Cancellation Ġof Ġsus pended Ġ` receive ` Ġis Ġatomic *: Ġwhen Ġthis Ġfunction ĊĠĠĠĠ Ġ* Ġthrows Ġa Ġ[ Cancellation Exception ], Ġit Ġmeans Ġthat Ġthe Ġelement Ġwas Ġnot Ġretrieved Ġfrom Ġthis Ġchannel . ĊĠĠĠĠ Ġ* ĠAs Ġa Ġside - effect Ġof Ġatomic Ġcancellation , Ġa Ġthread - bound Ġcoroutine Ġ( to Ġsome ĠUI Ġthread , Ġfor Ġexample ) Ġmay ĊĠĠĠĠ Ġ* Ġcontinue Ġto Ġexecute Ġeven Ġafter Ġit Ġwas Ġcancelled Ġfrom Ġthe Ġsame Ġthread Ġin Ġthe Ġcase Ġwhen Ġthis Ġreceive Ġoperation ĊĠĠĠĠ Ġ* Ġwas Ġalready Ġres umed Ġand Ġthe Ġcontinuation Ġwas Ġposted Ġfor Ġexecution Ġto Ġthe Ġthread 's Ġqueue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġfunction Ġdoes Ġnot Ġcheck Ġfor Ġcancellation Ġwhen Ġit Ġis Ġnot Ġsus pended . ĊĠĠĠĠ Ġ* ĠUse Ġ[ yield ] Ġor Ġ[ Coroutine Scope . isActive ] Ġto Ġperiodically Ġcheck Ġfor Ġcancellation Ġin Ġtight Ġloops Ġif Ġneeded . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġcan Ġbe Ġused Ġin Ġ[ select ] Ġinv ocations Ġwith Ġthe Ġ[ on Receive Or Closed ] Ġclause . ĊĠĠĠĠ Ġ* ĠUse Ġ[ poll ] Ġto Ġtry Ġreceiving Ġfrom Ġthis Ġchannel Ġwithout Ġwaiting . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ suppress Ġ* This Ġis Ġan Ġinternal ĠAPI , Ġdo Ġnot Ġuse *: ĠInline Ġclasses ĠABI Ġis Ġnot Ġstable Ġyet Ġand ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġ[ KT - 2 7 5 2 4 ]( https :// yout rack . jetbrains . com / issue / KT - 2 7 5 2 4 ) Ġneeds Ġto Ġbe Ġfixed . ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Internal Cor outines Api Ġ// Ġuntil Ġhttps :// yout rack . jetbrains . com / issue / KT - 2 7 5 2 4 Ġis Ġfixed ĊĠĠĠ Ġpublic Ġsuspend Ġfun Ġreceive Or Closed (): ĠValue Or Closed < E > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġand Ġremoves Ġan Ġelement Ġfrom Ġthis Ġchannel Ġif Ġits Ġnot Ġempty , Ġor Ġreturns Ġ` null ` Ġif Ġthe Ġchannel Ġis Ġempty ĊĠĠĠĠ Ġ* Ġor Ġis Ġ[ is Ġclosed Ġfor Ġ` receive `][ is Closed For Receive ] Ġwithout Ġa Ġcause . ĊĠĠĠĠ Ġ* ĠIt Ġthrows Ġthe Ġoriginal Ġ[ close ][ Send Channel . close ] Ġcause Ġexception Ġif Ġthe Ġchannel Ġhas Ġ_ failed _. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġpoll (): ĠE ? Ċ Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġiterator Ġto Ġreceive Ġelements Ġfrom Ġthis Ġchannel Ġusing Ġa Ġ` for ` Ġloop . Ċ // ĠĠĠĠ Ġ* ĠIteration Ġcompletes Ġnormally Ġwhen Ġthe Ġchannel Ġ[ is Ġclosed Ġfor Ġ` receive `][ is Closed For Receive ] Ġwithout Ġa Ġcause Ġand Ċ // ĠĠĠĠ Ġ* Ġthrows Ġthe Ġoriginal Ġ[ close ][ Send Channel . close ] Ġcause Ġexception Ġif Ġthe Ġchannel Ġhas Ġ_ failed _. Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġpublic Ġoperator Ġfun Ġiterator (): ĠChannel Iterator < E > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel s Ġre ception Ġof Ġremaining Ġelements Ġfrom Ġthis Ġchannel Ġwith Ġan Ġoptional Ġ[ cause ]. ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġcloses Ġthe Ġchannel Ġand Ġremoves Ġall Ġbuffered Ġsent Ġelements Ġfrom Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġcause Ġcan Ġbe Ġused Ġto Ġspecify Ġan Ġerror Ġmessage Ġor Ġto Ġprovide Ġother Ġdetails Ġon ĊĠĠĠĠ Ġ* Ġthe Ġcancellation Ġreason Ġfor Ġdebugging Ġpurposes . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġcause Ġis Ġnot Ġspecified , Ġthen Ġan Ġinstance Ġof Ġ[ Cancellation Exception ] Ġwith Ġa ĊĠĠĠĠ Ġ* Ġdefault Ġmessage Ġis Ġcreated Ġto Ġ[ close ][ Send Channel . close ] Ġthe Ġchannel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIm mediate ly Ġafter Ġinvocation Ġof Ġthis Ġfunction Ġ[ is Closed For Receive ] Ġand ĊĠĠĠĠ Ġ* Ġ[ is Closed For Send ][ Send Channel . is Closed For Send ] ĊĠĠĠĠ Ġ* Ġon Ġthe Ġside Ġof Ġ[ Send Channel ] Ġstart Ġreturning Ġ` true `. ĠAny Ġattempt Ġto Ġsend Ġto Ġor Ġreceive Ġfrom Ġthis Ġchannel ĊĠĠĠĠ Ġ* Ġwill Ġlead Ġto Ġa Ġ[ Cancellation Exception ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġcancel ( cause : ĠC ancellation Exception ? Ġ= Ġnull ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġdis crimin ated Ġunion Ġof Ġ[ Receive Channel . receive Or Closed ] Ġresult Ċ Ġ* Ġthat Ġencaps ulates Ġeither Ġan Ġelement Ġof Ġtype Ġ[ T ] Ġsuccessfully Ġreceived Ġfrom Ġthe Ġchannel Ġor Ġa Ġclose Ġcause . Ċ Ġ* Ċ Ġ* Ġ: todo : ĠDo Ġnot Ġmake Ġit Ġpublic Ġbefore Ġresolving Ġtodos Ġin Ġthe Ġcode Ġof Ġthis Ġclass . Ċ Ġ* Ċ Ġ* Ġ@ suppress Ġ* This Ġis Ġan Ġinternal ĠAPI , Ġdo Ġnot Ġuse *: ĠInline Ġclasses ĠABI Ġis Ġnot Ġstable Ġyet Ġand Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġ[ KT - 2 7 5 2 4 ]( https :// yout rack . jetbrains . com / issue / KT - 2 7 5 2 4 ) Ġneeds Ġto Ġbe Ġfixed . Ċ Ġ*/ Ċ @ Suppress (" NON _ PUBLIC _ PRIMARY _ CON STRUCTOR _ OF _ INLINE _ CLASS ") Ċ //@ Internal Cor outines Api Ġ// Ġuntil Ġhttps :// yout rack . jetbrains . com / issue / KT - 2 7 5 2 4 Ġis Ġfixed Ċ public Ġinline Ġclass ĠValue Or Closed < out ĠT > Ċ internal Ġconstructor ( private Ġval Ġholder : ĠAny ?) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġinstance Ġrepresents Ġa Ġreceived Ġelement . ĊĠĠĠĠ Ġ* ĠIn Ġthis Ġcase Ġ[ is Closed ] Ġreturns Ġ` false `. ĊĠĠĠĠ Ġ* Ġtodo : Ġit Ġis Ġcommented Ġfor Ġnow , Ġbecause Ġit Ġis Ġnot Ġused ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// public Ġval Ġis Value : ĠBoolean Ġget () Ġ= Ġholder Ġ! is ĠClosed ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġinstance Ġrepresents Ġa Ġclose Ġcause . ĊĠĠĠĠ Ġ* ĠIn Ġthis Ġcase Ġ[ is Value ] Ġreturns Ġ` false `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġis Closed : ĠBoolean Ġget () Ġ= Ġholder Ġis ĠClosed ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġreceived Ġvalue Ġif Ġthis Ġinstance Ġrepresents Ġa Ġreceived Ġvalue , Ġor Ġthrows Ġan Ġ[ IllegalStateException ] Ġotherwise . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ: todo : ĠDec ide , Ġif Ġit Ġis Ġneeded , Ġhow Ġit Ġshall Ġbe Ġnamed Ġwith Ġrelation Ġto Ġ[ value OrThrow ]: ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSo Ġwe Ġhave Ġthe Ġfollowing Ġmethods Ġon Ġ` Value Or Closed `: Ġ` value `, Ġ` value OrNull `, Ġ` value OrThrow `. ĊĠĠĠĠ Ġ* ĠOn Ġthe Ġother Ġhand , Ġthe Ġchannel Ġhas Ġthe Ġfollowing Ġ` receive ` Ġvariants : ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ` receive ` Ġwhich Ġcorresponds Ġto Ġ` receive Or Closed (). value OrThrow ` ... Ġh uh ? ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ` receive OrNull ` Ġwhich Ġcorresponds Ġto Ġ` receive Or Closed (). value OrNull ` ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ` receive Or Closed ` ĊĠĠĠĠ Ġ* ĠFor Ġthe Ġsake Ġof Ġsimplicity Ġconsider Ġdropping Ġthis Ġversion Ġof Ġ` value ` Ġand Ġrename Ġ[ value OrThrow ] Ġto Ġsimply Ġ` value `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġpublic Ġval Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( holder Ġis ĠClosed ) Ġerror ( DEFAULT _ CLOSE _ MESSAGE ) Ġelse Ġholder Ġas ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġreceived Ġvalue Ġif Ġthis Ġelement Ġrepresents Ġa Ġreceived Ġvalue , Ġor Ġ` null ` Ġotherwise . ĊĠĠĠĠ Ġ* Ġ: todo : ĠDec ide Ġif Ġit Ġshall Ġbe Ġmade Ġinto Ġextension Ġthat Ġis Ġavailable Ġonly Ġfor Ġnon - null ĠT . ĊĠĠĠĠ Ġ* ĠNote : Ġit Ġmight Ġbecome Ġinconsistent Ġwith Ġkotlin . Result ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġpublic Ġval Ġvalue OrNull : ĠT ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( holder Ġis ĠClosed ) Ġnull Ġelse Ġholder Ġas ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ: todo : ĠDec ide , Ġif Ġit Ġis Ġneeded , Ġhow Ġit Ġshall Ġbe Ġnamed Ġwith Ġrelation Ġto Ġ[ value ]. ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġ` value OrThrow ` Ġre throws Ġthe Ġcause Ġadding Ġno Ġmeaningful Ġinformation Ġabout Ġthe Ġcall Ġsite , ĊĠĠĠĠ Ġ* Ġso Ġif Ġone Ġis Ġsure Ġthat Ġ` Value Or Closed ` Ġalways Ġholds Ġa Ġvalue , Ġthis Ġvery Ġproperty Ġshould Ġbe Ġused . ĊĠĠĠĠ Ġ* ĠOtherwise , Ġit Ġcould Ġbe Ġvery Ġhard Ġto Ġlocate Ġthe Ġsource Ġof Ġthe Ġexception . ĊĠĠĠĠ Ġ* Ġtodo : Ġit Ġis Ġcommented Ġfor Ġnow , Ġbecause Ġit Ġis Ġnot Ġused ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ//@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ// public Ġval Ġvalue OrThrow : ĠT ĊĠĠĠ Ġ// ĠĠĠ Ġget () Ġ= Ġif Ġ( holder Ġis ĠClosed ) Ġthrow Ġholder . exception Ġelse Ġholder Ġas ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġclose Ġcause Ġof Ġthe Ġchannel Ġif Ġthis Ġinstance Ġrepresents Ġa Ġclose Ġcause , Ġor Ġthrows ĊĠĠĠĠ Ġ* Ġan Ġ[ IllegalStateException ] Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġpublic Ġval Ġclose Cause : ĠThrowable ? Ġget () Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠClosed ) Ġholder . cause Ġelse Ġerror (" Channel Ġwas Ġnot Ġclosed ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠtoString (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClosed Ġ-> Ġholder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Value ($ holder )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠClosed (@ Jvm Field Ġval Ġcause : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġit Ġis Ġcommented Ġfor Ġnow , Ġbecause Ġit Ġis Ġnot Ġused ĊĠĠĠĠĠĠĠ Ġ// val Ġexception : ĠThrowable Ġget () Ġ= Ġcause Ġ?: ĠClosed Receive Channel Exception ( DEFAULT _ CLOSE _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠClosed Ġ&& Ġcause Ġ== Ġother . cause ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġcause . hashCode () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Closed ($ cause )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtodo : Ġconsider Ġmaking Ġvalue / closed Ġconstructors Ġpublic Ġin Ġthe Ġfuture . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠĠĠĠĠ Ġinternal Ġinline Ġfun Ġ< E > Ġvalue ( value : ĠE ): ĠValue Or Closed < E > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Or Closed ( value ) ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠĠĠĠĠ Ġinternal Ġinline Ġfun Ġ< E > Ġclosed ( cause : ĠThrowable ?): ĠValue Or Closed < E > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Or Closed ( Closed ( cause )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠChannel Ġis Ġa Ġnon - blocking Ġprimitive Ġfor Ġcommunication Ġbetween Ġa Ġsender Ġ( via Ġ[ Send Channel ]) Ġand Ġa Ġreceiver Ġ( via Ġ[ Receive Channel ]). Ċ Ġ* ĠConcept ually , Ġa Ġchannel Ġis Ġsimilar Ġto ĠJava 's Ġ[ BlockingQueue ][ java . util . concurrent . BlockingQueue ], Ċ Ġ* Ġbut Ġit Ġhas Ġsus pending Ġoperations Ġinstead Ġof Ġblocking Ġones Ġand Ġcan Ġbe Ġ[ closed ][ Send Channel . close ]. Ċ Ġ* Ċ Ġ* ĠThe Ġ` Channel ( capacity )` Ġfactory Ġfunction Ġis Ġused Ġto Ġcreate Ġchannels Ġof Ġdifferent Ġkinds Ġdepending Ġon Ċ Ġ* Ġthe Ġvalue Ġof Ġthe Ġ` capacity ` Ġinteger : Ċ Ġ* Ċ Ġ* Ġ* ĠWhen Ġ` capacity ` Ġis Ġ 0 Ġ& mdash ; Ġit Ġcreates Ġa Ġ` R ende z vous Channel `. Ċ Ġ* ĠĠ ĠThis Ġchannel Ġdoes Ġnot Ġhave Ġany Ġbuffer Ġat Ġall . ĠAn Ġelement Ġis Ġtransferred Ġfrom Ġthe Ġsender Ċ Ġ* ĠĠ Ġto Ġthe Ġreceiver Ġonly Ġwhen Ġ[ send ] Ġand Ġ[ receive ] Ġinv ocations Ġmeet Ġin Ġtime Ġ( ren dez vous ), Ġso Ġ[ send ] Ġsus p ends Ċ Ġ* ĠĠ Ġuntil Ġanother Ġcoroutine Ġinvokes Ġ[ receive ], Ġand Ġ[ receive ] Ġsus p ends Ġuntil Ġanother Ġcoroutine Ġinvokes Ġ[ send ]. Ċ Ġ* Ċ Ġ* Ġ* ĠWhen Ġ` capacity ` Ġis Ġ[ Channel . UN LIMIT ED ] Ġ& mdash ; Ġit Ġcreates Ġa Ġ` LinkedList Channel `. Ċ Ġ* ĠĠ ĠThis Ġchannel Ġhas Ġa Ġlinked - list Ġbuffer Ġof Ġun limited Ġcapacity Ġ( limited Ġonly Ġby Ġavailable Ġmemory ). Ċ Ġ* ĠĠ Ġ[ Sending ][ send ] Ġto Ġthis Ġchannel Ġnever Ġsus p ends , Ġand Ġ[ offer ] Ġalways Ġreturns Ġ` true `. Ċ Ġ* Ċ Ġ* Ġ* ĠWhen Ġ` capacity ` Ġis Ġ[ Channel . CON FL ATED ] Ġ& mdash ; Ġit Ġcreates Ġa Ġ` Con fl ated Channel `. Ċ Ġ* ĠĠ ĠThis Ġchannel Ġbuffers Ġat Ġmost Ġone Ġelement Ġand Ġcon fl ates Ġall Ġsubsequent Ġ` send ` Ġand Ġ` offer ` Ġinv ocations , Ċ Ġ* ĠĠ Ġso Ġthat Ġthe Ġreceiver Ġalways Ġgets Ġthe Ġlast Ġelement Ġsent . Ċ Ġ* ĠĠ ĠBack - to - send Ġsent Ġelements Ġare Ġ_ con fl ated _ Ġ& mdash ; Ġonly Ġthe Ġlast Ġsent Ġelement Ġis Ġreceived , Ċ Ġ* ĠĠ Ġwhile Ġpreviously Ġsent Ġelements Ġ** are Ġlost **. Ċ Ġ* ĠĠ Ġ[ Sending ][ send ] Ġto Ġthis Ġchannel Ġnever Ġsus p ends , Ġand Ġ[ offer ] Ġalways Ġreturns Ġ` true `. Ċ Ġ* Ċ Ġ* Ġ* ĠWhen Ġ` capacity ` Ġis Ġpositive Ġbut Ġless Ġthan Ġ[ UN LIMIT ED ] Ġ& mdash ; Ġit Ġcreates Ġan Ġarray - based Ġchannel Ġwith Ġthe Ġspecified Ġcapacity . Ċ Ġ* ĠĠ ĠThis Ġchannel Ġhas Ġan Ġarray Ġbuffer Ġof Ġa Ġfixed Ġ` capacity `. Ċ Ġ* ĠĠ Ġ[ Sending ][ send ] Ġsus p ends Ġonly Ġwhen Ġthe Ġbuffer Ġis Ġfull , Ġand Ġ[ re ceiving ][ receive ] Ġsus p ends Ġonly Ġwhen Ġthe Ġbuffer Ġis Ġempty . Ċ Ġ*/ Ċ public Ġinterface ĠChannel < E > Ġ: ĠSend Channel < E >, ĠReceive Channel < E > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstants Ġfor Ġthe Ġchannel Ġfactory Ġfunction Ġ` Channel ()`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRequests Ġa Ġchannel Ġwith Ġan Ġun limited Ġcapacity Ġbuffer Ġin Ġthe Ġ` Channel (... )` Ġfactory Ġfunction ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠUN LIMIT ED Ġ= ĠInt . MAX _ VALUE ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRequests Ġa Ġren dez vous Ġchannel Ġin Ġthe Ġ` Channel (... )` Ġfactory Ġfunction Ġ& mdash ; Ġa Ġ` R ende z vous Channel ` Ġgets Ġcreated . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠR EN DE Z VO US Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRequests Ġa Ġcon fl ated Ġchannel Ġin Ġthe Ġ` Channel (... )` Ġfactory Ġfunction Ġ& mdash ; Ġa Ġ` Con fl ated Channel ` Ġgets Ġcreated . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠCON FL ATED Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRequests Ġa Ġbuffered Ġchannel Ġwith Ġthe Ġdefault Ġbuffer Ġcapacity Ġin Ġthe Ġ` Channel (... )` Ġfactory Ġfunction Ġ& mdash ; ĊĠĠĠĠĠĠĠĠ Ġ* Ġan Ġ` Array Channel ` Ġgets Ġcreated Ġwith Ġthe Ġdefault Ġcapacity . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdefault Ġcapacity Ġis Ġ 6 4 Ġand Ġcan Ġbe Ġoverridden Ġby Ġsetting ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ DEFAULT _ BUFFER _ PROPERTY _ NAME ] Ġon ĠJVM . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠBUFFER ED Ġ= Ġ- 2 ĊĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġfor Ġinternal Ġuse , Ġcannot Ġbe Ġused Ġwith ĠChannel (...) ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠOPTIONAL _ CHANNEL Ġ= Ġ- 3 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠName Ġof Ġthe Ġproperty Ġthat Ġdefines Ġthe Ġdefault Ġchannel Ġcapacity Ġwhen ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ BUFFER ED ] Ġis Ġused Ġas Ġparameter Ġin Ġ` Channel (... )` Ġfactory Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ Ċ // ĠĠĠĠĠĠĠ Ġpublic Ġconst Ġval ĠDEFAULT _ BUFFER _ PROPERTY _ NAME Ġ= Ġ" kotlin x . coroutines . channels . default Buffer " Ċ Ċ // ĠĠĠĠĠĠĠ Ġinternal Ġval ĠCHAN NEL _ DEFAULT _ CAP ACITY Ġ= Ġsystem Prop ( DEFAULT _ BUFFER _ PROPERTY _ NAME , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ 6 4 , Ġ 1 , ĠUN LIMIT ED Ġ- Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // /** Ċ // Ġ* ĠCreates Ġa Ġchannel Ġwith Ġthe Ġspecified Ġbuffer Ġcapacity Ġ( or Ġwithout Ġa Ġbuffer Ġby Ġdefault ). Ċ // Ġ* ĠSee Ġ[ Channel ] Ġinterface Ġdocumentation Ġfor Ġdetails . Ċ // Ġ* Ċ // Ġ* Ġ@ param Ġcapacity Ġeither Ġa Ġpositive Ġchannel Ġcapacity Ġor Ġone Ġof Ġthe Ġconstants Ġdefined Ġin Ġ[ Channel . Factory ]. Ċ // Ġ* Ġ@ throws ĠIllegalArgumentException Ġwhen Ġ[ capacity ] Ġ< Ġ- 2 Ċ // Ġ*/ Ċ // public Ġfun Ġ< E > ĠChannel ( capacity : ĠInt Ġ= ĠR EN DE Z VO US ): ĠChannel < E > Ġ= Ċ // ĠĠĠ Ġwhen Ġ( capacity ) Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠR EN DE Z VO US Ġ-> ĠR ende z vous Channel () Ċ // ĠĠĠĠĠĠĠ ĠUN LIMIT ED Ġ-> ĠLinkedList Channel () Ċ // ĠĠĠĠĠĠĠ ĠCON FL ATED Ġ-> ĠCon fl ated Channel () Ċ // ĠĠĠĠĠĠĠ ĠBUFFER ED Ġ-> ĠArray Channel ( CHANNEL _ DEFAULT _ CAP ACITY ) Ċ // ĠĠĠĠĠĠĠ Ġelse Ġ-> ĠArray Channel ( capacity ) Ċ // ĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠIndicates Ġan Ġattempt Ġto Ġ[ send ][ Send Channel . send ] Ġto Ġa Ġ[ is Closed For Send ][ Send Channel . is Closed For Send ] Ġchannel Ċ Ġ* Ġthat Ġwas Ġclosed Ġwithout Ġa Ġcause . ĠA Ġ_ failed _ Ġchannel Ġre throws Ġthe Ġoriginal Ġ[ close ][ Send Channel . close ] Ġcause Ċ Ġ* Ġexception Ġon Ġsend Ġattempts . Ċ Ġ* Ċ Ġ* ĠThis Ġexception Ġis Ġa Ġsubclass Ġof Ġ[ IllegalStateException ], Ġbecause , Ġconcept ually , Ġit Ġis Ġthe Ġsender 's Ġresponsibility Ċ Ġ* Ġto Ġclose Ġthe Ġchannel Ġand Ġnot Ġtry Ġto Ġsend Ġanything Ġthere after . ĠAt tempts Ġto Ċ Ġ* Ġsend Ġto Ġa Ġclosed Ġchannel Ġindicate Ġa Ġlogical Ġerror Ġin Ġthe Ġsender 's Ġcode . Ċ Ġ*/ Ċ public Ġclass ĠClosed Send Channel Exception ( message : ĠString ?) Ġ: ĠIllegalStateException ( message ) Ċ Ċ /** Ċ Ġ* ĠIndicates Ġan Ġattempt Ġto Ġ[ receive ][ Receive Channel . receive ] Ġfrom Ġa Ġ[ is Closed For Receive ][ Receive Channel . is Closed For Receive ] Ċ Ġ* Ġchannel Ġthat Ġwas Ġclosed Ġwithout Ġa Ġcause . ĠA Ġ_ failed _ Ġchannel Ġre throws Ġthe Ġoriginal Ġ[ close ][ Send Channel . close ] Ġcause Ċ Ġ* Ġexception Ġon Ġreceive Ġattempts . Ċ Ġ* Ċ Ġ* ĠThis Ġexception Ġis Ġa Ġsubclass Ġof Ġ[ NoSuch ElementException ] Ġto Ġbe Ġconsistent Ġwith Ġplain Ġcollections . Ċ Ġ*/ Ċ public Ġclass ĠClosed Receive Channel Exception ( message : ĠString ?) Ġ: ĠNoSuch ElementException ( message )