@@ -58,8 +58,8 @@ func (tree *BTree) NewRecordPager(fileType string, level uint8) (*RecordPager, e
5858}
5959
6060// Opens or creates a file and sets up the Pager
61- func NewPager [T PageBox ](tree * BTree , fileType string , level uint8 ) (* Pager [T ], error ) {
62- pageSize := int64 (float64 (tree .BatchBaseSize ) * math .Pow (float64 (tree .Increment )/ 100 , float64 (level )))
61+ func NewPager [T PageItem [ T ] ](tree * BTree , fileType string , level uint8 ) (* Pager [T ], error ) {
62+ pageSize := int64 (float64 (tree .BaseSize ) * math .Pow (float64 (tree .Increment )/ 100 , float64 (level )))
6363
6464 var headerSize int64 = 0
6565
@@ -112,7 +112,7 @@ func NewPager[T PageBox](tree *BTree, fileType string, level uint8) (*Pager[T],
112112 cache , err := ristretto .NewCache (
113113 & ristretto.Config [int64 , * Page [T ]]{
114114 NumCounters : 10000 , // Track frequency of ~10,000 items
115- MaxCost : 1 << 20 , // 1MB total cache size
115+ MaxCost : 1 << 24 , // 16MB total cache size
116116 BufferItems : 64 , // Batch writes for performance
117117 OnEvict : func (item * ristretto.Item [* Page [T ]]) {
118118 delete (pager .dirtyPages , item .Value .Index ) // Mark page as clean
@@ -154,7 +154,7 @@ func (store *Pager[T]) AllocatePage(index int64) error {
154154 return nil
155155}
156156
157- func (store * Pager [T ]) NumPages (index int32 ) (int64 , error ) {
157+ func (store * Pager [T ]) NumPages () (int64 , error ) {
158158 store .mu .Lock ()
159159 defer store .mu .Unlock ()
160160
@@ -214,8 +214,7 @@ func (store *Pager[T]) WriteAt(data []byte, offset int64) error {
214214 }
215215 }
216216
217- {
218- // Write data at the given offset
217+ { // Write data at the given offset
219218 n , err := store .file .WriteAt (data , offset )
220219 if err != nil || (len (data )) != int (n ) {
221220 return ErrorWritingDataAtOffset (offset , err )
@@ -247,19 +246,22 @@ func (store *Pager[T]) ReadPage(index int64) (*Page[T], error) {
247246 return cachedPage , nil
248247 }
249248
250- page := & Page [T ]{
251- Index : index ,
252- }
249+ var item T
250+ page := item .NewPage (index ) // Calls the NewPage method of PageItem[T]
251+
252+ // page := &Page[T]{
253+ // Index: index,
254+ // }
253255 // Store in Ristretto cache
254- store .cache .Set (index , page , store .itemSize ) // Cost = size of page
255- store .cache .Wait () // Ensure writes are processed
256+ store .cache .Set (index , page , store .itemSize )
257+ store .cache .Wait ()
256258
257259 store .mu .Unlock ()
258260
259261 page .mu .Lock ()
260262 defer page .mu .Unlock ()
261263
262- data , err := store .ReadAt (index * store .itemSize , int32 (store .itemSize ))
264+ data , err := store .ReadAt (index * store .itemSize + store . headerSize , int32 (store .itemSize ))
263265 if err != nil {
264266 return nil , err
265267 }
0 commit comments