@@ -8,6 +8,7 @@ module ArraySet = Util.ArraySet
88module Arraytbl = Util. Arraytbl
99module AM = Metadata. ArrayMetadata
1010module GM = Metadata. GroupMetadata
11+ module ST = Extensions. StorageTransformers
1112
1213module Make (M : STORE ) : S with type t = M. t = struct
1314 include M
@@ -35,6 +36,7 @@ module Make (M : STORE) : S with type t = M.t = struct
3536 ?(sep =`Slash )
3637 ?(dimension_names =[] )
3738 ?(attributes =`Null )
39+ ?(storage_transformers =[] )
3840 ?codecs
3941 ~shape
4042 ~chunks
@@ -54,6 +56,7 @@ module Make (M : STORE) : S with type t = M.t = struct
5456 ~codecs
5557 ~dimension_names
5658 ~attributes
59+ ~storage_transformers
5760 ~shape
5861 kind
5962 fill_value
@@ -154,11 +157,12 @@ module Make (M : STORE) : S with type t = M.t = struct
154157 in
155158 let codecs = AM. codecs meta in
156159 let prefix = ArrayNode. to_key node ^ " /" in
160+ let tf = AM. storage_transformers meta in
157161 let cindices = ArraySet. of_seq @@ Arraytbl. to_seq_keys tbl in
158162 ArraySet. fold (fun idx acc ->
159163 acc >> = fun () ->
160164 let chunkkey = prefix ^ AM. chunk_key meta idx in
161- (match get t chunkkey with
165+ (match ST. get ( module M ) t tf chunkkey with
162166 | Ok b ->
163167 Codecs.Chain. decode codecs repr b
164168 | Error _ ->
@@ -173,7 +177,7 @@ module Make (M : STORE) : S with type t = M.t = struct
173177 List. iter
174178 (fun (c , v ) -> Ndarray. set arr c v) @@ Arraytbl. find_all tbl idx;
175179 Codecs.Chain. encode codecs arr >> | fun encoded ->
176- set t chunkkey encoded) cindices (Ok () )
180+ ST. set ( module M ) t tf chunkkey encoded) cindices (Ok () )
177181
178182 let get_array
179183 : type a b .
@@ -206,6 +210,7 @@ module Make (M : STORE) : S with type t = M.t = struct
206210 let tbl = Arraytbl. create @@ Array. length pair in
207211 let prefix = ArrayNode. to_key node ^ " /" in
208212 let chain = AM. codecs meta in
213+ let tf = AM. storage_transformers meta in
209214 let repr =
210215 {kind
211216 ;shape = AM. chunk_shape meta
@@ -217,7 +222,7 @@ module Make (M : STORE) : S with type t = M.t = struct
217222 | Some arr ->
218223 Ok (Ndarray. get arr coord :: l)
219224 | None ->
220- (match get t @@ prefix ^ AM. chunk_key meta idx with
225+ (match ST. get ( module M ) t tf @@ prefix ^ AM. chunk_key meta idx with
221226 | Ok b ->
222227 Codecs.Chain. decode chain repr b
223228 | Error _ ->
@@ -243,8 +248,9 @@ module Make (M : STORE) : S with type t = M.t = struct
243248 ArraySet. of_list @@ AM. chunk_indices meta @@ AM. shape meta in
244249 let s' =
245250 ArraySet. of_list @@ AM. chunk_indices meta shape in
251+ let tf = AM. storage_transformers meta in
246252 ArraySet. iter
247- (fun v -> erase t @@ pre ^ AM. chunk_key meta v)
253+ (fun v -> ST. erase ( module M ) t tf @@ pre ^ AM. chunk_key meta v)
248254 ArraySet. (diff s s');
249255 Ok (set t mkey @@ AM. encode @@ AM. update_shape meta shape)
250256end
0 commit comments