/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 , ĠM erc en ary ĠCre ators ĠCompany . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ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 Ġco . merc en ary . cre ators . kotlin . util . io Ċ Ċ import Ġco . merc en ary . cre ators . kotlin . util .* Ċ import Ġjava . io . InputStream Ċ Ċ @ Ignore For Serialize Ċ class ĠChain InputStream Ġ@ Framework Dsl Ġconstructor ( args : ĠList < InputStream >) Ġ: ĠInputStream (), ĠEx hausted , ĠSized Container , ĠOpen Auto C losable , ĠHas Map Names Ġ{ ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġconstructor ( args : ĠIterator < InputStream >) Ġ: Ġthis ( args . to Iterator (). toList ()) ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġconstructor ( args : ĠIterable < InputStream >) Ġ: Ġthis ( args . to Iterator (). toList ()) ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġconstructor ( args : ĠSequence < InputStream >) Ġ: Ġthis ( args . to Iterator (). toList ()) ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġconstructor ( head : ĠInputStream , Ġnext : ĠInputStream , Ġvar arg Ġmore : ĠInputStream ) Ġ: Ġthis ( toList Of ( head , Ġnext , Ġ* more )) ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġprivate Ġval Ġopen Ġ= Ġget Atomic True () ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġprivate Ġval Ġlist Ġ= ĠBasic ArrayList ( args ) ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġprivate Ġval Ġmany Ġ= Ġargs . size Of (). copyOf () ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġprivate Ġfun Ġmany Of () Ġ= Ġmany . toList Capacity () ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġ@ Ignore For Serialize ĊĠĠĠ Ġoverride Ġfun ĠisOpen () Ġ= Ġopen . isTrue () ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġ@ Ignore For Serialize ĊĠĠĠ Ġoverride Ġfun Ġis Ex hausted (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Closed () Ġ|| ĠisEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġsize Of () Ġ= Ġlist . size Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( size Of () Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( MATH _ INVALID _ SIZE _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġid en Of () ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġto Map Names (). to Safe String () ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġto Map Names () Ġ= Ġdict Of (" type " Ġto Ġname Of (), Ġ" open " Ġto ĠisOpen (), Ġ" size " Ġto Ġsize Of (), Ġ" many " Ġto Ġmany Of ()) ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠChain InputStream Ġ-> Ġthis Ġ=== Ġother ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġprivate Ġfun Ġbump () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( size Of () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Ġ{ Ġlist . pop () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( size Of () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġlist [ 0 ]. read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read Ġ!= ĠIS _ NOT _ FOUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrow ables . throw n ( cause ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbump () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠIS _ NOT _ FOUND ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġread ( buff : ĠByteArray ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread ( buff , Ġ 0 , Ġbuff . size Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġread ( buff : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIS _ NOT _ FOUND ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( off Ġ< Ġ 0 Ġ|| Ġlen Ġ< Ġ 0 Ġ|| Ġlen Ġ> Ġ( buff . size Of () Ġ- Ġoff )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( MATH _ INVALID _ SIZE _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( len Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġlist [ 0 ]. read ( buff , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrow ables . throw n ( cause ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbump () ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( size Of () Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠIS _ NOT _ FOUND ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( open . isTrue To False ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbump () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrow ables . throw n ( cause ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( size Of () Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . reset () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogs Of < Chain InputStream >(). warn Ġ{ Ġ" closed ()" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġmark ( read : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ("${ name Of ()}. mark () Ġnot Ġsupported ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ("${ name Of ()}. reset () Ġnot Ġsupported ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Framework Dsl ĊĠĠĠ Ġoverride Ġfun Ġavailable (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Ex hausted ()) Ġ 0 Ġelse Ġlist [ 0 ]. available () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ignore For Serialize ĊĠĠĠ Ġclass ĠChain InputStream Builder Ġ@ Framework Dsl Ġinternal Ġconstructor ( args : ĠIterable < InputStream >) Ġ: ĠMutable Sized Container , ĠBuilder < Chain InputStream >, ĠHas Map Names Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlist Ġ= ĠBasic ArrayList ( args ) ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġcontains ( element : ĠInputStream ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input Ġ=== Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist . contains ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġappend ( element : ĠInputStream , Ġvar arg Ġargs : ĠInputStream ): ĠChain InputStream Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġappend ( args . to Collection ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġappend ( element : ĠInputStream Supplier , Ġvar arg Ġargs : ĠInputStream Supplier ): ĠChain InputStream Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( element . to InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . isNot Ex hausted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . forEach Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( input . to InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġappend ( args : ĠIterable < InputStream >): ĠChain InputStream Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . append ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġappend ( args : ĠIterator < InputStream >): ĠChain InputStream Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . append ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġappend ( args : ĠSequence < InputStream >): ĠChain InputStream Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . append ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild (): ĠChain InputStream Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Of () Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( MATH _ INVALID _ SIZE _ ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠChain InputStream ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġ@ Ignore For Serialize ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsize Of () Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsize Of (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist . size Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġid en Of () ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġto Map Names (). to Safe String () ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChain InputStream Builder Ġ-> Ġthis Ġ=== Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Map Names () Ġ= Ġdict Of (" type " Ġto Ġname Of (), Ġ" size " Ġto Ġsize Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġbuilder ( args : ĠIterable < InputStream > Ġ= Ġto ListOf ()) Ġ= ĠChain InputStream Builder ( args ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġbuilder ( args : ĠIterator < InputStream >) Ġ= ĠChain InputStream Builder ( args . to Collection ()) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġbuilder ( args : ĠSequence < InputStream >) Ġ= ĠChain InputStream Builder ( args . to Collection ()) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Framework Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġbuilder ( head : ĠInputStream , Ġnext : ĠInputStream , Ġvar arg Ġmore : ĠInputStream ) Ġ= ĠChain InputStream Builder ( toList Of ( head , Ġnext , Ġ* more )) ĊĠĠĠ Ġ} Ċ }