package Ġpro . dev il . lol db . log Ċ Ċ import Ġpro . dev il . lol db . fs . Page Id Ċ import Ġpro . dev il . lol db . fs . byte Buffer . FileManager Ċ import Ġpro . dev il . lol db . fs . byte Buffer . Page ĊĊ Ċ /** Ċ Ġ* ĠÐľ ÐµÐ½ ÐµÐ´ Ð¶ ÐµÑĢ ĠÑĢÐ°Ð±Ð¾ÑĤ Ñĭ ĠÑģ ĠÐ¶ ÑĥÑĢ Ð½ Ð°Ð» Ð¾Ð¼ . ĠÐŁ ÑĥÑĤ ÐµÐ¼ ĠÐ± Ð» Ð¾Ñĩ Ð½Ð¾Ð¹ ĠÐ·Ð°Ð¿Ð¸Ñģ Ð¸ ĠÑģÑĤÑĢÐ°Ð½Ð¸ÑĨ . Ċ Ġ* Ċ Ġ* ĠÐŁ Ð¾ ĠÐ¸ Ð´ ÐµÐµ ĠÐ´Ð¾Ð»Ð¶ ÐµÐ½ ĠÐ±ÑĭÑĤÑĮ Ġ" Ñģ Ð¸Ð½ Ð³ Ð» ÑĤ Ð¾Ð½ Ð¾Ð¼ ". ĠÐŁ ÑĢ Ñı Ð¼ Ð¾Ð¹ ĠÑĢÐµ Ð°Ð»Ð¸Ð· Ð°ÑĨÐ¸Ð¸ ĠÑģ Ð¸Ð½ Ð³ Ð» ÑĤ Ð¾Ð½ Ð° ĠÐ½Ðµ ĠÐ´ ÐµÐ» Ð°Ð» , ĠÐ¾ ÑģÑĤÐ°Ð² Ð¸Ð» ĠÑįÑĤÐ¾ ĠÐ¿Ð¾Ðº Ð° ĠÐ½Ð° ĠÐ¾ÑĤ ÐºÑĥ Ð¿ Ċ Ġ* Ġ" Ð¿ Ð¾Ð»ÑĮÐ·Ð¾Ð²Ð°ÑĤ ÐµÐ» Ñİ " ĠÐ¼ÐµÐ½ ÐµÐ´ Ð¶ ÐµÑĢÐ° . Ċ Ġ*/ Ċ class ĠLog Manager ( ĊĠĠĠ Ġprivate Ġval Ġfile Manager : ĠFile Manager , ĊĠĠĠ Ġprivate Ġval Ġlog File : ĠString Ċ ) Ġ: ĠIterable < ByteArray > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlog Page : ĠPage ĊĠĠĠ Ġprivate Ġvar Ġcurrent Pid : ĠPage Id ĊĊĠĠĠ Ġprivate Ġvar Ġlatest LS N : ĠLong Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġlatest Saved LS N : ĠLong Ġ= Ġ 0 L ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġba Ġ= ĠByteArray ( file Manager . block Size ) ĊĠĠĠĠĠĠĠ Ġlog Page Ġ= ĠPage ( ba ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlog Size : ĠLong Ġ= Ġfile Manager . length ( log File ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠÐķÑģÐ»Ð¸ ĠÐ¶ ÑĥÑĢ Ð½ Ð°Ð» ĠÐ¿ ÑĥÑģÑĤ Ð¾Ð¹ Ġ- ĠÑģ Ð¾Ð· Ð´Ð° ÐµÐ¼ ĠÐ¿ ÑĥÑģÑĤ Ð¾Ð¹ ĠÐ± Ð» Ð¾Ðº ĊĠĠĠĠĠĠĠ Ġ// ĠÐĺ Ð½Ð°Ñĩ Ðµ ĠÑĩ Ð¸ÑĤ Ð°ÐµÐ¼ ĠÐ¿Ð¾ÑģÐ» ÐµÐ´ Ð½Ð¸ Ð¹ ĠÐ± Ð» Ð¾Ðº ĠÐ² ĠÐ° Ðº ÑĤÑĥ Ð°Ð»ÑĮ Ð½ÑĥÑİ ĠÑģÑĤÑĢÐ°Ð½Ð¸ÑĨ Ñĥ ĊĠĠĠĠĠĠĠ Ġif Ġ( log Size . equals ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Pid Ġ= Ġappend New Block () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Pid Ġ= ĠPage Id ( log File , Ġlog Size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Manager . read ( current Pid , Ġlog Page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐĶ Ð¾Ð±Ð°Ð² Ð»Ñı ÐµÐ¼ ĠÐ·Ð°Ð¿Ð¸Ñģ ÑĮ ĠÐ² ĠÐ¶ ÑĥÑĢ Ð½ Ð°Ð» ĠÐ¸ ĠÐ²Ð¾Ð· Ð²ÑĢÐ°Ñī Ð°ÐµÑĤ ĠÑĨ ÐµÐ» Ð¾Ðµ ĠÑĩ Ð¸Ñģ Ð»Ð¾ . ĊĠĠĠĠ Ġ* ĠÐĹ Ð°Ð¿ Ð¸Ñģ ÑĮ Ġ- ĠÑįÑĤÐ¾ ĠÐ¿ÑĢ Ð¾ÑģÑĤ Ð¾ ĠÐ¼ Ð°ÑģÑģ Ð¸Ð² ĠÐ± Ð°Ð¹ ÑĤ , ĠÐºÐ¾ÑĤÐ¾ÑĢ ÑĭÐ¹ ĠÐ´Ð¾Ð»Ð¶ ÐµÐ½ ĠÑĥ Ð¼ Ðµ Ñī Ð°ÑĤÑĮÑģÑı ĠÐ² Ð½ ÑĥÑĤ ÑĢÐ¸ ĠÐ¾Ð´ Ð½Ð¾Ð¹ ĠÑģÑĤÑĢÐ°Ð½Ð¸ÑĨ Ñĭ ĊĠĠĠĠ Ġ* ĠÐĴ Ð¾Ð· Ð²ÑĢÐ°Ñī Ð°ÐµÐ¼ Ð¾Ðµ ĠÑĩ Ð¸Ñģ Ð»Ð¾ Ġ- ĠÐ¿ Ð¾ÑĢ Ñı Ð´ ÐºÐ¾Ð² ÑĭÐ¹ ĠÐ½ Ð¾Ð¼ ÐµÑĢ ĠÐ¶ ÑĥÑĢ Ð½ Ð°Ð»Ð° Ġ( LS N ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐĴ Ñĭ Ð· Ð¾Ð² ĠÐ½Ðµ ĠÐ³ Ð°ÑĢ Ð°Ð½ ÑĤÐ¸ ÑĢÑĥ ÐµÑĤ ĠÐ¼ Ð³ Ð½Ð¾Ð² ÐµÐ½ Ð½Ð¾Ð³Ð¾ ĠÑģÐ¾ Ñħ ÑĢÐ°Ð½ ÐµÐ½Ð¸Ñı ĠÐ½Ð° ĠÐ´ Ð¸Ñģ Ðº . ĠÐľ Ð¾Ð¶ Ð½Ð¾ ĠÑĦ Ð¾ÑĢ Ñģ Ð¸ÑĢÐ¾Ð² Ð°ÑĤÑĮ ĠÐ²Ñĭ Ð· Ð¾Ð² Ð¾Ð¼ Ġflush ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġappend ( record : ĠByteArray ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ ĵ Ð°ÑĢ Ð°Ð½ ÑĤÐ¸ ÑĢÐ¾Ð² Ð°Ð½ Ð½Ð¾Ðµ ĠÑģÐ¾ Ñħ ÑĢÐ°Ð½ ÐµÐ½Ð¸Ðµ ĠÑĥÐºÐ°Ð· Ð°Ð½ Ð½Ð¾Ð¹ ĠÐ¸ ĠÐ²ÑģÐµ Ñħ ĠÐ¿ÑĢÐµÐ´ Ñĭ Ð´Ñĥ ÑīÐ¸ Ñħ ĠÐ·Ð°Ð¿Ð¸Ñģ ÐµÐ¹ ĠÐ½Ð° ĠÐ´ Ð¸Ñģ Ðº ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġflush ( ls n : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ls n Ġ>= Ġlatest Saved LS N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐĺ ÑĤÐµÑĢ Ð°ÑĤÐ¾ÑĢ ĠÐ´Ð»Ñı ĠÐ¿ÑĢÐ¾ ÑħÐ¾Ð´ Ð° ĠÐ¿Ð¾ ĠÐ·Ð°Ð¿ Ð¸ ÑģÑı Ð¼ ĠÐ¶ ÑĥÑĢ Ð½ Ð°Ð»Ð° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐĴ ĠÑģÐ² ÑıÐ· Ð¸ ĠÑģÐ¾ ĠÑģÐ¿ Ðµ ÑĨÐ¸ ÑĦ Ð¸Ðº Ð¾Ð¹ ĠÐ½Ð°Ð· Ð½Ð°Ñĩ ÐµÐ½Ð¸Ñı ĠÐ¶ ÑĥÑĢ Ð½ Ð°Ð»Ð° Ġ- ĠÐ¾Ð± ÑħÐ¾Ð´ ĠÐ¸ Ð´ ÐµÑĤ ĠÐ² ĠÐ¾Ð± ÑĢÐ°ÑĤ Ð½Ð¾Ð¼ ĠÐ½Ð°Ð¿ ÑĢÐ°Ð² Ð» ÐµÐ½Ð¸Ð¸ Ġ( Ð¾ÑĤ ĠÑģ Ð°Ð¼ Ð¾Ð¹ ĠÐ¿ Ð¾Ð·Ð´ Ð½ ÐµÐ¹ ĠÐº ĠÑģ Ð°Ð¼ Ð¾Ð¹ ĠÑĢ Ð°Ð½ Ð½ ÐµÐ¹ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < ByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġflush () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLog Iterator ( file Manager , Ġcurrent Pid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend New Block (): ĠPage Id Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġfile Manager . append ( log File ) ĊĠĠĠĠĠĠĠ Ġlog Page . writeInt ( 0 , Ġfile Manager . block Size ) ĊĠĠĠĠĠĠĠ Ġfile Manager . write ( block , Ġlog Page ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġblock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠ Ġfile Manager . write ( current Pid , Ġlog Page ) ĊĠĠĠĠĠĠĠ Ġlatest Saved LS N Ġ= Ġlatest LS N ĊĠĠĠ Ġ} Ċ }