package Ġcom . push er . push notifications . internal Ċ Ċ import Ġcom . squareup . tape 2 . Queue File Ċ import Ġjava . io .* Ċ Ċ interface ĠPersistent Job Queue < T : ĠSerializable > Ġ{ ĊĠ Ġfun Ġpush ( job : ĠT ) ĊĠ Ġfun Ġpeek (): ĠT ? ĊĠ Ġfun Ġpop () ĊĠ Ġfun Ġclear () ĊĠ Ġfun Ġas Iterable (): ĠIterable < T > Ċ } Ċ Ċ class ĠT ape Job Queue < T : ĠSerializable >( file : ĠFile ): ĠPersistent Job Queue < T > Ġ{ ĊĠ Ġprivate Ġval Ġqueue File Ġ= ĠQueue File . Builder ( file ). build () ĊĊĠ Ġoverride Ġfun Ġpush ( job : ĠT ) Ġ{ ĊĠĠĠ Ġval Ġbyte OutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġval Ġobject OutputStream Ġ= ĠObject OutputStream ( byte OutputStream ) ĊĠĠĠ Ġobject OutputStream . write Object ( job ) ĊĠĠĠ Ġobject OutputStream . flush () ĊĠĠĠ Ġval Ġjob Bytes Ġ= Ġbyte OutputStream . toByteArray () ĊĊĠĠĠ Ġsynchronized ( queue File ) Ġ{ ĊĠĠĠĠĠ Ġqueue File . add ( job Bytes ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" unchecked _ cast ") ĊĠ Ġoverride Ġfun Ġpeek (): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġjob Bytes Ġ= Ġsynchronized ( queue File ) Ġ{ ĊĠĠĠĠĠ Ġqueue File . peek () Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbyte InputStream Ġ= ĠByteArrayInputStream ( job Bytes ) ĊĠĠĠ Ġval Ġobject InputStream Ġ= ĠObject InputStream ( byte InputStream ) ĊĊĠĠĠ Ġreturn Ġobject InputStream . read Object () Ġas ĠT ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpop () Ġ{ ĊĠĠĠ Ġsynchronized ( queue File ) Ġ{ ĊĠĠĠĠĠ Ġqueue File . remove () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠ Ġsynchronized ( queue File ) Ġ{ ĊĠĠĠĠĠ Ġqueue File . clear () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" unchecked _ cast ") ĊĠ Ġoverride Ġfun Ġas Iterable (): ĠIterable < T > Ġ{ ĊĠĠĠ Ġreturn Ġsynchronized ( queue File ) Ġ{ ĊĠĠĠĠĠ Ġqueue File . as Iterable (). map Ġ{ Ġjob Bytes Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġbyte InputStream Ġ= ĠByteArrayInputStream ( job Bytes ) ĊĠĠĠĠĠĠĠ Ġval Ġobject InputStream Ġ= ĠObject InputStream ( byte InputStream ) ĊĊĠĠĠĠĠĠĠ Ġobject InputStream . read Object () Ġas ĠT ĊĠĠĠĠĠ Ġ}. toList () Ġ// Ġforcing Ġthe Ġlist Ġto Ġbe Ġcomputed Ġhere Ġin Ġits Ġentire ty ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }