/** Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġ- Ġ 2 0 1 8 Ġ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 Ġkotlinx . cache s Ċ Ċ /** Ċ Ġ* ĠMin imal istic ĠLinkedList Ġimplementation Ġfor ĠL RU Ġe viction Ġcaches . Ċ Ġ*/ Ċ internal Ġclass ĠLinkedList Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfirst : ĠNode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast : ĠNode ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsize Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġadd ( node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġif Ġ( last Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ++ size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove To First ( node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( first Ġ!= Ġnode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunlink Node ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . prev Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . next Ġ= Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunlink Node ( node ) ĊĠĠĠĠĠĠĠ Ġ-- size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Last (): ĠNode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( last Ġ?: Ġthrow ĠIllegalStateException (" The Ġlist Ġis Ġempty ")). apply Ġ{ Ġremove ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunlink Node ( node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġnode . prev ĊĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġnode . next ĊĠĠĠĠĠĠĠ Ġif Ġ( prev Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev . next Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( next Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġprev ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext . prev Ġ= Ġprev ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinterface ĠNode Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġprev : ĠNode ? ĊĊĠĠĠĠĠĠĠ Ġvar Ġnext : ĠNode ? ĊĠĠĠ Ġ} Ċ }