package Ġio . ktor . utils . io . internal Ċ Ċ import Ġio . ktor . utils . io . Byte Channel Sequential Base Ċ import Ġio . ktor . utils . io . close Ċ import Ġio . ktor . utils . io . core . internal . Chunk Buffer Ċ Ċ internal Ġsuspend Ġfun ĠByte Channel Sequential Base . join To Impl ( dst : ĠByte Channel Sequential Base , Ġclose On End : ĠBoolean ) Ġ{ ĊĠĠĠ Ġcopy To Sequential Impl ( dst , ĠLong . MAX _ VALUE ) ĊĠĠĠ Ġif Ġ( close On End ) Ġdst . close () Ċ } Ċ Ċ /** Ċ Ġ* ĠReads Ġup Ġto Ġ[ limit ] Ġbytes Ġfrom Ġreceiver Ġchannel Ġand Ġwrites Ġthem Ġto Ġ[ dst ] Ġchannel . Ċ Ġ* ĠCloses Ġ[ dst ] Ġchannel Ġif Ġfails Ġto Ġread Ġor Ġwrite Ġwith Ġcause Ġexception . Ċ Ġ* Ġ@ return Ġa Ġnumber Ġof Ġcopied Ġbytes Ċ Ġ*/ Ċ internal Ġsuspend Ġfun ĠByte Channel Sequential Base . copy To Sequential Impl ( dst : ĠByte Channel Sequential Base , Ġlimit : ĠLong ): ĠLong Ġ{ ĊĠĠĠ Ġrequire ( this Ġ!== Ġdst ) ĊĊĠĠĠ Ġvar Ġremaining Limit Ġ= Ġlimit ĊĊĠĠĠ Ġwhile Ġ( remaining Limit Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! await Internal At Least 1 ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtransferred Ġ= Ġtransfer To ( dst , Ġremaining Limit ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcopied Ġ= Ġif Ġ( transfer red Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtail Ġ= Ġcopy To Tail ( dst , Ġremaining Limit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tail Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dst . available For Write Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdst . await At Least N Bytes Available For Write ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransferred ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġremaining Limit Ġ-= Ġcopied ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġlimit Ġ- Ġremaining Limit Ċ } Ċ Ċ private Ġsuspend Ġfun ĠByte Channel Sequential Base . copy To Tail ( dst : ĠByte Channel Sequential Base , Ġlimit : ĠLong ): ĠLong Ġ{ ĊĠĠĠ Ġval Ġlast Piece Ġ= ĠChunk Buffer . Pool . borrow () ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Piece . reset For Write ( limit . coerce At Most ( last Piece . capacity . to Long ()). toInt ()) ĊĠĠĠĠĠĠĠ Ġval Ġrc Ġ= Ġread Available ( last Piece ) ĊĠĠĠĠĠĠĠ Ġif Ġ( rc Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Piece . release ( Chunk Buffer . Pool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdst . write Fully ( last Piece ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrc . to Long () ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Piece . release ( Chunk Buffer . Pool ) ĊĠĠĠ Ġ} Ċ } Ċ