/** Ċ Ġ* ĠCopyright Ġ 2 0 1 0 Ġ- Ġ 2 0 2 1 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġjet brains . ex od us . io . in Memory Ċ Ċ import Ġjet brains . ex od us . Ex od us Exception Ċ import Ġjet brains . ex od us . io . Abstract Data Writer Ċ import Ġjet brains . ex od us . io . Block Ċ import Ġjet brains . ex od us . io . Remove BlockType Ċ import Ġjet brains . ex od us . log . Log Util Ċ import Ġmu . K Logging Ċ import Ġorg . jetbrains . annotations . NotNull Ċ Ċ open Ġclass ĠMemory Data Writer ( private Ġval Ġmemory : ĠMemory ) Ġ: ĠAbstract Data Writer () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Logging () ĊĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdata : ĠMemory . Block ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Closed () ĊĠĠĠĠĠĠĠ Ġdata . write ( b , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Block ( block Address : ĠLong , Ġ@ NotNull Ġr bt : ĠRemove BlockType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! memory . remove Block ( block Address )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEx od us Exception (" There Ġis Ġno Ġmemory Ġblock Ġby Ġaddress Ġ$ block Address ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Deleted Ġfile Ġ" Ġ+ ĠLog Util . getLog Filename ( block Address ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtruncate Block ( block Address : ĠLong , Ġlength : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmemory . get OrCreate Block Data ( block Address , Ġlength ) ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Truncated Ġfile Ġ" Ġ+ ĠLog Util . getLog Filename ( block Address ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlock ( timeout : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġlock Info (): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġsync Impl () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġclose Impl () Ġ{ ĊĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Impl () Ġ= Ġmemory . clear () ĊĊĠĠĠ Ġoverride Ġfun Ġopen OrCreate Block Impl ( address : ĠLong , Ġlength : ĠLong ): ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmemory . get OrCreate Block Data ( address , Ġlength ) ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġclosed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Closed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Already Ġclosed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ