package Ġcom . opensource . svg ap layer . utils Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġfor Ġcreating Ġpools Ġof Ġobjects . ĠAn Ġexample Ġuse Ġlooks Ġlike Ġthis : Ċ Ġ* Ġ< pre > Ċ Ġ* Ġpublic Ġclass ĠMy P ooled Class Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġprivate Ġstatic Ġfinal ĠSynchron ized Pool < My P ooled Class > Ġs Pool Ġ= Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĠSynchron ized Pool < My P ooled Class >( 1 0 ); Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġpublic Ġstatic ĠMy P ooled Class Ġobtain () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠMy P ooled Class Ġinstance Ġ= Ġs Pool . acquire (); Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġreturn Ġ( instance Ġ!= Ġnull ) Ġ? Ġinstance Ġ: Ġnew ĠMy P ooled Class (); Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġpublic Ġvoid Ġre cycle () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġstate Ġif Ġneeded . Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġs Pool . release ( this ); Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ. Ġ. Ġ. Ċ Ġ* Ġ} Ċ Ġ* Ġ</ pre > Ċ Ġ* Ċ Ġ*/ Ċ class ĠP ools Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInterface Ġfor Ġmanaging Ġa Ġpool Ġof Ġobjects . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠThe Ġp ooled Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠPool < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠAn Ġinstance Ġfrom Ġthe Ġpool Ġif Ġsuch , Ġnull Ġotherwise . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġacquire (): ĠT ? ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRelease Ġan Ġinstance Ġto Ġthe Ġpool . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġinstance ĠThe Ġinstance Ġto Ġrelease . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠWhether Ġthe Ġinstance Ġwas Ġput Ġin Ġthe Ġpool . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException ĠIf Ġthe Ġinstance Ġis Ġalready Ġin Ġthe Ġpool . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġrelease ( instance : ĠT ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSimple Ġ( non - synchronized ) Ġpool Ġof Ġobjects . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmax PoolSize ĠThe Ġmax Ġpool Ġsize . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException ĠIf Ġthe Ġmax Ġpool Ġsize Ġis Ġless Ġthan Ġzero . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠThe Ġp ooled Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġclass ĠSimple Pool < T >( max PoolSize : ĠInt ) Ġ: ĠPool < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Pool : ĠArray < Any ?> ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm PoolSize Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( max PoolSize Ġ> Ġ 0 ) Ġ{ Ġ" The Ġmax Ġpool Ġsize Ġmust Ġbe Ġ> Ġ 0 " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pool Ġ= ĠarrayOf Null s ( max PoolSize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġacquire (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m PoolSize Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast P ooled Index Ġ= Ġm PoolSize Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= Ġm Pool [ last P ooled Index ] Ġas ĠT ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pool [ last P ooled Index ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm PoolSize -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelease ( instance : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck (! isIn Pool ( instance )) Ġ{ Ġ" Already Ġin Ġthe Ġpool !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m PoolSize Ġ< Ġm Pool . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pool [ m PoolSize ] Ġ= Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm PoolSize ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠisIn Pool ( instance : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm PoolSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pool [ i ] Ġ=== Ġinstance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ }