@ file : Suppress (" FunctionName ") Ċ Ċ package Ġcom . chr is jen x . mult itr ack Ċ Ċ import Ġok io . Buffered Sink Ċ import Ġok io . Buffered Source Ċ import Ġjava . io . Closeable Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġmain Ġinterface Ġto Ġtalk Ġto Ġread Ġwrite Ġwith . Ċ Ġ*/ Ċ interface ĠMulti Track < T Ġ: ĠAny , ĠR BOOL , ĠR INT , ĠS INT , ĠRESULT , ĠRESULT _ LIST > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPush Ġan Ġitem Ġonto Ġthe Ġend Ġof Ġthe Ġqueue . ĠTrue Ġon Ġsuccess , Ġfalse Ġif Ġit Ġfailed Ġto Ġadd . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpush ( entry : ĠT ): ĠR BOOL ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġand ĠRemove Ġthe Ġfirst Ġitem Ġoff Ġthe Ġqueue Ġif Ġone Ġexists , Ġnull Ġif Ġempty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpoll (): ĠRESULT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLook Ġat Ġthe Ġfirst Ġitem Ġin Ġthe Ġlist Ġwithout Ġremoving , Ġnull Ġif Ġqueue Ġis Ġempty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpeek (): ĠRESULT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLook Ġat Ġthe Ġfirst Ġ[ limit ] Ġitem ( s ) Ġin Ġthe Ġlist Ġwithout Ġremoving . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpeek List ( limit : ĠInt ? Ġ= Ġnull ): ĠRESULT _ LIST ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġsize Ġof Ġthe Ġqueue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsize (): ĠR INT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStream Ġthe Ġcurrent Ġsize Ġof Ġthe Ġqueue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstream Size (): ĠS INT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġhead Ġof Ġthe Ġqueue , Ġboolean Ġcallback Ġwhether Ġit 's Ġsuccessful . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove (): ĠR BOOL ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġup Ġto Ġthe Ġ[ limit ] Ġfrom Ġthe Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove ( limit : ĠInt ?): ĠR INT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMut ate Ġeach Ġelement Ġon Ġthe Ġqueue , Ġreturns Ġhow Ġmany Ġitems Ġit Ġmut ated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmutate ( converter : Ġ( T ) Ġ-> ĠT ): ĠR INT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe Ġclose Ġdown Ġunderlying Ġscope Ġand Ġclose Ġthe Ġdrivers . ĠYou Ġwill Ġneed Ġto Ġcreate Ġa Ġnew ĠDriver Ġand ĠMulti Track Ġobject ĊĠĠĠĠ Ġ* Ġafter Ġcalling Ġthis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġobjects Ġinto Ġbinary Ġstreams Ġand Ġout Ġof Ġbinary Ġstreams . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠRuntimeException Ġif Ġit Ġfails Ġto Ġconvert Ġfor Ġsome Ġreason . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠConverter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThese Ġmethods Ġare Ġatomic Ġand Ġwill Ġrun Ġduring Ġa Ġqueue Ġoperation , Ġit Ġis Ġincorrect Ġto Ġdo Ġany Ġsort Ġof ĠIO Ġother ĊĠĠĠĠĠĠĠĠ Ġ* Ġthan Ġconverting Ġto / from Ġobjects . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsource Ġto Ġread Ġthe Ġstream Ġfrom , Ġit 's Ġnot Ġguaranteed Ġthe Ġunderlying Ġsource Ġif Ġbuffered Ġso Ġdepending Ġon ĊĠĠĠĠĠĠĠĠ Ġ* Ġyour Ġimplementation Ġit Ġis Ġadv ised Ġto Ġdo Ġthat . ĠThe Ġsource Ġis Ġalso Ġclosed Ġon Ġreturn Ġfrom Ġthis Ġmethod ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe Ġobject Ġfrom Ġthe Ġsource , Ġif Ġyou Ġfail Ġto Ġconvert Ġthen Ġreturn Ġsome Ġform Ġof Ġ[ RuntimeException ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġthis Ġwill Ġget Ġpassed Ġup Ġto Ġthe Ġcaller Ġof Ġthe Ġ[ Multi Track ] Ġoperation . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġto Value ( source : ĠBuffered Source ): ĠT ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThese Ġmethods Ġare Ġatomic Ġand Ġwill Ġrun Ġduring Ġa Ġqueue Ġoperation , Ġit Ġis Ġincorrect Ġto Ġdo Ġany Ġsort Ġof ĠIO Ġother ĊĠĠĠĠĠĠĠĠ Ġ* Ġthan Ġconverting Ġto / from Ġobjects . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġthe Ġobject Ġto Ġconvert Ġto Ġbinary ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsink Ġwhere Ġto Ġwrite Ġthe Ġobject Ġbinary Ġrepresentation Ġtoo Ġ( i . e . ĠObject Ġ-> ĠJson ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Value ( value : ĠT , Ġsink : ĠBuffered Sink ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠDriver Ġ: ĠClose able Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWrite Ġthe Ġblob Ġto Ġthe Ġthe Ġbacking Ġqueue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwrite ( blob : ĠByteArray ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRead Ġthe Ġsize Ġof Ġthe Ġqueue ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġcurrent Ġsize Ġof Ġthe Ġqueue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcount (): ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠP eek Ġfor Ġ[ limit ] Ġsize ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlimit Ġnull Ġwill Ġtry Ġand Ġreturn Ġeverything , Ġif Ġyou Ġknow Ġyou Ġhave Ġa Ġlarge Ġlist , ĠI Ġwould Ġrecommend Ġyou ĊĠĠĠĠĠĠĠĠ Ġ* Ġset Ġa Ġlimit ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġwill Ġbe Ġempty Ġif Ġthe Ġlist Ġis Ġempty ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġpeek ( limit : ĠInt ? Ġ= Ġnull ): ĠList < ByteArray > ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRead Ġand Ġremove Ġthe Ġitem Ġat Ġthe Ġfront Ġof Ġthe Ġqueue . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġnull Ġif Ġqueue Ġis Ġempty ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġpoll (): ĠByteArray ? ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRemove Ġhead Ġof Ġthe Ġqueue ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlimit Ġhow Ġmany Ġrows Ġto Ġdelete , Ġnull Ġis Ġall Ġof Ġthem ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġcount Ġof Ġhow Ġmany Ġentries Ġremoved ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġremove ( limit : ĠInt ? Ġ= Ġnull ): ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠPass Ġin Ġthe Ġbyte array Ġto Ġmutate Ġthen Ġif Ġthe Ġresult Ġis Ġdifferent Ġsave Ġthat Ġback Ġto Ġthe Ġqueue . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcount Ġof Ġhow Ġmany Ġrows Ġwere Ġmut ated . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġmutate ( mapper : Ġ( byteArray : ĠByteArray ) Ġ-> ĠByteArray ): ĠInt ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject ĠSchema Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTABLE Ġ= Ġ"` multi _ track `" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDROP _ TABLE Ġ= Ġ" DROP ĠTABLE ĠIF ĠEXISTS Ġ$ TABLE ;" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠCREATE _ TABLE Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ$ TABLE Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` id ` ĠĠĠĠĠ ĠINTEGER ĠPRIMARY ĠKEY ĠAUTO INCREMENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` blob ` ĠĠĠ ĠBLOB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` version ` ĠTEXT ĠNOT ĠNULL ĠDEFAULT Ġ' 0 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠINSERT Ġ= Ġ" INSERT ĠINTO Ġ$ TABLE Ġ(` blob `) ĠVALUES Ġ(? )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠCOUNT Ġ= Ġ" SELECT ĠCOUNT (` id `) ĠFROM Ġ$ TABLE ;" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠFETCH Ġ= Ġ" SELECT Ġ` id `, Ġ` blob `, Ġ` version ` ĠFROM Ġ$ TABLE ĠORDER ĠBY Ġ` id ` ĠLIMIT Ġ? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠUPDATE Ġ= Ġ" UPDATE Ġ$ TABLE ĠSET Ġ` blob ` Ġ= Ġ? ĠWHERE Ġ` id ` Ġ= Ġ? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDELETE _ BY _ ID Ġ= Ġ" DELETE ĠFROM Ġ$ TABLE ĠWHERE Ġ` id ` Ġ= Ġ? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDELETE _ BY _ LIMIT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" DELETE ĠFROM Ġ$ TABLE ĠWHERE Ġ` id ` ĠIN Ġ( SELECT Ġ` id ` ĠFROM Ġ$ TABLE ĠORDER ĠBY Ġ` id ` ĠLIMIT Ġ? );" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ