package Ġwin inet . tools Ċ Ċ /** Ċ Ġ* ĠAdapt ive Buffer Ġis Ġinspired Ġby ĠJetBrains ' Ġimplementation Ġof Ċ Ġ* Ġnative ĠByteArrayOutputStream Ġknown Ġfrom ĠJVM . Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠAdapt ive Buffer Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbuf : ĠByteArray ĊĠĠĠ Ġprivate Ġvar Ġcount : ĠInt Ġ= Ġ 0 ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbuf Ġ= ĠByteArray ( 3 2 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġarray copy ( src : ĠByteArray , Ġsrc Pos : ĠInt , Ġdst : ĠByteArray , Ġdst Pos : ĠInt , Ġlen : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst [ dst Pos Ġ+ Ġi ] Ġ= Ġsrc [ src Pos Ġ+ Ġi ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġexpand ( i : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ+ Ġi Ġ<= Ġbuf . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew buf Ġ= ĠByteArray (( count Ġ+ Ġi ) Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġarray copy ( buf , Ġ 0 , Ġnew buf , Ġ 0 , Ġcount ) ĊĠĠĠĠĠĠĠ Ġbuf Ġ= Ġnew buf ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġto ByteArray (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Array Ġ= ĠByteArray ( count ) ĊĠĠĠĠĠĠĠ Ġarray copy ( buf , Ġ 0 , Ġnew Array , Ġ 0 , Ġcount ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Array ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġwrite ( buffer : ĠByteArray ) Ġ= Ġwrite ( buffer , Ġ 0 , Ġbuffer . size ) ĊĊĊĠĠĠ Ġfun Ġwrite ( buffer : ĠByteArray , Ġoffset : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġint Ġoverflow ĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ< Ġ 0 Ġ|| Ġoffset Ġ> Ġbuffer . size Ġ|| Ġcount Ġ< Ġ 0 Ġ|| Ġcount Ġ> Ġbuffer . size Ġ- Ġoffset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpand Ġif Ġnecessary . ĊĠĠĠĠĠĠĠ Ġexpand ( count ) ĊĠĠĠĠĠĠĠ Ġarray copy ( buffer , Ġoffset , Ġbuf , Ġthis . count , Ġcount ) ĊĠĠĠĠĠĠĠ Ġthis . count Ġ+= Ġcount ĊĠĠĠ Ġ} Ċ Ċ } Ċ