@@ -157,15 +157,16 @@ def __init__(self, vbk: VBK, offset: int):
157
157
self .header = c_vbk .SnapshotSlotHeader (vbk .fh )
158
158
self .descriptor = None
159
159
self .grain = None
160
+ self .valid_max_banks = 0
160
161
self .banks = []
161
162
162
163
if self .header .ContainsSnapshot :
163
164
self .descriptor = c_vbk .SnapshotDescriptor (vbk .fh )
164
165
self .grain = c_vbk .BanksGrain (vbk .fh )
165
166
166
- valid_max_banks = 0xF8 if self .vbk .header .SnapshotSlotFormat == 0 else 0x7F00
167
+ self . valid_max_banks = 0xF8 if self .vbk .header .SnapshotSlotFormat == 0 else 0x7F00
167
168
168
- if self .grain .MaxBanks > valid_max_banks :
169
+ if self .grain .MaxBanks > self . valid_max_banks :
169
170
raise VBKError ("Invalid SnapshotSlot: MaxBanks is not valid" )
170
171
if self .grain .StoredBanks > self .grain .MaxBanks :
171
172
raise VBKError ("Invalid SnapshotSlot: StoredBanks is greater than MaxBanks" )
@@ -185,11 +186,11 @@ def size(self) -> int:
185
186
if self .header .ContainsSnapshot :
186
187
slot_size += self .grain .MaxBanks * len (c_vbk .BankDescriptor )
187
188
else :
188
- slot_size += ( 0xF8 if self .vbk . header . SnapshotSlotFormat == 0 else 0x7F00 ) * len (c_vbk .BankDescriptor )
189
+ slot_size += self .valid_max_banks * len (c_vbk .BankDescriptor )
189
190
190
- if slot_size & 0xFFF :
191
+ if slot_size & ( PAGE_SIZE - 1 ) :
191
192
# Round to next page boundary
192
- slot_size = (slot_size & ~ 0xFFF ) + PAGE_SIZE
193
+ slot_size = (slot_size & ~ ( PAGE_SIZE - 1 ) ) + PAGE_SIZE
193
194
194
195
return slot_size
195
196
@@ -279,7 +280,7 @@ def verify(self, crc: int) -> bool:
279
280
self .vbk .fh .seek (self .offset )
280
281
return crc (self .vbk .fh .read (self .size )) == crc
281
282
282
- def page (self , page : int ) -> bytes :
283
+ def page (self , page : int ) -> memoryview :
283
284
"""Read a page from the bank.
284
285
285
286
Args:
@@ -840,7 +841,7 @@ def data(self, idx: int) -> bytes:
840
841
page = self ._pages [page_id ]
841
842
offset = (offset * self ._entry_size ) + 8
842
843
843
- buf = self .vbk .active_slot . page (page )
844
+ buf = self .vbk .page (page )
844
845
entry = buf [offset : offset + self ._entry_size ]
845
846
return entry
846
847
@@ -929,7 +930,7 @@ def data(self, idx: int) -> bytes:
929
930
offset *= self ._entry_size
930
931
931
932
page_no = self ._lookup_page (page_idx )
932
- return self .vbk .active_slot . page (page_no )[offset : offset + self ._entry_size ]
933
+ return self .vbk .page (page_no )[offset : offset + self ._entry_size ]
933
934
934
935
935
936
class FibMetaSparseTable :
@@ -952,6 +953,7 @@ def __init__(self, vbk: VBK, page: int, count: int):
952
953
self .page = page
953
954
self .count = count
954
955
956
+ # Newer versions use a different block descriptor
955
957
self .type = FibBlockDescriptorV7 if self .vbk .is_v7 () else FibBlockDescriptor
956
958
self ._fake_sparse = self .type (
957
959
self .vbk ,
@@ -966,7 +968,7 @@ def __init__(self, vbk: VBK, page: int, count: int):
966
968
967
969
self ._open_table = lru_cache (128 )(self ._open_table )
968
970
969
- def _open_table (self , page : int , count : int ) -> MetaVector2 [FibBlockDescriptor | FibBlockDescriptorV7 ]:
971
+ def _open_table (self , page : int , count : int ) -> MetaVector [FibBlockDescriptor | FibBlockDescriptorV7 ]:
970
972
return MetaVector (self .vbk , self .type , page , count )
971
973
972
974
def get (self , idx : int ) -> FibBlockDescriptor | FibBlockDescriptorV7 :
@@ -1002,7 +1004,7 @@ def __init__(self, vbk: VBK, page: int, count: int, size: int):
1002
1004
self .page = page
1003
1005
self .count = count
1004
1006
1005
- self .mt = FibMetaSparseTable (vbk , page , count )
1007
+ self .table = FibMetaSparseTable (vbk , page , count )
1006
1008
1007
1009
super ().__init__ (size , align = vbk .block_size )
1008
1010
@@ -1017,7 +1019,7 @@ def _read(self, offset: int, length: int) -> bytes:
1017
1019
1018
1020
read_size = min (length , block_size - offset_in_block )
1019
1021
1020
- block_desc = self .mt .get (block_idx )
1022
+ block_desc = self .table .get (block_idx )
1021
1023
1022
1024
if block_desc .is_normal ():
1023
1025
block = self .vbk .block_store .get (block_desc .block_id )
0 commit comments