package Ġkotlinx . io . pool Ċ Ċ import Ġkotlinx . io . core .* Ċ Ċ interface ĠObject Pool < T Ġ: ĠAny > Ġ: ĠClose able Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPool Ġcapacity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcapacity : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġborrow Ġan Ġinstance . ĠPool Ġcan Ġre cycle Ġan Ġold Ġinstance Ġor Ġcreate Ġa Ġnew Ġone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġborrow (): ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe cycle Ġan Ġinstance . ĠShould Ġbe Ġre cyc led Ġwhat Ġwas Ġborrow ed Ġbefore Ġotherwise Ġcould Ġfail ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġre cycle ( instance : ĠT ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDispose Ġthe Ġwhole Ġpool . ĠNone Ġof Ġborrow ed Ġobjects Ġcould Ġbe Ġused Ġafter Ġthe Ġpool Ġgets Ġdisposed ĊĠĠĠĠ Ġ* Ġotherwise Ġit Ġcan Ġresult Ġin Ġundefined Ġbehaviour ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdispose () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDoes Ġpool Ġdispose ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ= Ġdispose () Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġpool Ġimplementation Ġof Ġzero Ġcapacity Ġthat Ġalways Ġcreates Ġnew Ġinstances Ċ Ġ*/ Ċ abstract Ġclass ĠNo Pool Impl < T Ġ: ĠAny > Ġ: ĠObject Pool < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcapacity : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġre cycle ( instance : ĠT ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDefault Ġobject Ġpool Ġimplementation Ċ Ġ*/ Ċ expect Ġabstract Ġclass ĠDefault Pool < T Ġ: ĠAny > Ġ: ĠObject Pool < T > Ġ{ ĊĠĠĠ Ġfinal Ġoverride Ġval Ġcapacity : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġinstance Ġof Ġ[ T ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġproduce Instance (): ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDispose Ġ[ instance ] Ġand Ġrelease Ġit 's Ġresources ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġdispose Instance ( instance : ĠT ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġ[ instance ]' s Ġstate Ġbefore Ġreuse : Ġreset Ġpointers , Ġcounters Ġand Ġso Ġon ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġclear Instance ( instance : ĠT ): ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġ[ instance ] Ġof Ġ[ T ]. ĠCould Ġverify Ġthat Ġthe Ġobject Ġhas Ġbeen Ġborrow ed Ġfrom Ġthis Ġpool ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġvalidate Instance ( instance : ĠT ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBor rows Ġand Ġinstance Ġof Ġ[ T ] Ġfrom Ġthe Ġpool , Ġinvokes Ġ[ block ] Ġwith Ġit Ġand Ġfinally Ġre cycles Ġit Ċ Ġ*/ Ċ @ Deprecated (" Use Ġuse Instance Ġinstead ", ĠReplace With (" use Instance ( block ) ")) Ċ inline Ġfun Ġ< T Ġ: ĠAny , ĠR > ĠObject Pool < T >. use Borrow ed ( block : Ġ( T ) Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠ Ġreturn Ġuse Instance ( block ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBor rows Ġand Ġinstance Ġof Ġ[ T ] Ġfrom Ġthe Ġpool , Ġinvokes Ġ[ block ] Ġwith Ġit Ġand Ġfinally Ġre cycles Ġit Ċ Ġ*/ Ċ inline Ġfun Ġ< T Ġ: ĠAny , ĠR > ĠObject Pool < T >. use Instance ( block : Ġ( T ) Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġborrow () ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġblock ( instance ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycle ( instance ) ĊĠĠĠ Ġ} Ċ } ĊĊ