@@ -24,8 +24,13 @@ use crate::IValue;
24
24
25
25
use it_memory_traits:: MemoryView ;
26
26
27
- pub fn array_lift_memory < R : RecordResolvable , MV : MemoryView > (
28
- lifter : & ILifter < ' _ , R , MV > ,
27
+ pub fn array_lift_memory <
28
+ R : RecordResolvable ,
29
+ MV : MemoryView < Store > ,
30
+ Store : it_memory_traits:: Store ,
31
+ > (
32
+ store : & mut <Store as it_memory_traits:: Store >:: ActualStore < ' _ > ,
33
+ lifter : & ILifter < ' _ , R , MV , Store > ,
29
34
value_type : & IType ,
30
35
offset : u32 ,
31
36
elements_count : u32 ,
@@ -37,90 +42,98 @@ pub fn array_lift_memory<R: RecordResolvable, MV: MemoryView>(
37
42
let reader = & lifter. reader ;
38
43
39
44
let ivalues = match value_type {
40
- IType :: Boolean => reader. read_bool_array ( offset, elements_count) ?,
41
- IType :: S8 => reader. read_s8_array ( offset, elements_count) ?,
42
- IType :: S16 => reader. read_s16_array ( offset, elements_count) ?,
43
- IType :: S32 => reader. read_s32_array ( offset, elements_count) ?,
44
- IType :: S64 => reader. read_s64_array ( offset, elements_count) ?,
45
- IType :: I32 => reader. read_i32_array ( offset, elements_count) ?,
46
- IType :: I64 => reader. read_i64_array ( offset, elements_count) ?,
47
- IType :: U8 => reader. read_u8_array ( offset, elements_count) ?,
48
- IType :: U16 => reader. read_u16_array ( offset, elements_count) ?,
49
- IType :: U32 => reader. read_u32_array ( offset, elements_count) ?,
50
- IType :: U64 => reader. read_u64_array ( offset, elements_count) ?,
51
- IType :: F32 => reader. read_f32_array ( offset, elements_count) ?,
52
- IType :: F64 => reader. read_f64_array ( offset, elements_count) ?,
53
- IType :: String => read_string_array ( lifter, offset, elements_count) ?,
54
- IType :: ByteArray => read_array_array ( lifter, & IType :: U8 , offset, elements_count) ?,
55
- IType :: Array ( ty) => read_array_array ( lifter, & ty, offset, elements_count) ?,
45
+ IType :: Boolean => reader. read_bool_array ( store , offset, elements_count) ?,
46
+ IType :: S8 => reader. read_s8_array ( store , offset, elements_count) ?,
47
+ IType :: S16 => reader. read_s16_array ( store , offset, elements_count) ?,
48
+ IType :: S32 => reader. read_s32_array ( store , offset, elements_count) ?,
49
+ IType :: S64 => reader. read_s64_array ( store , offset, elements_count) ?,
50
+ IType :: I32 => reader. read_i32_array ( store , offset, elements_count) ?,
51
+ IType :: I64 => reader. read_i64_array ( store , offset, elements_count) ?,
52
+ IType :: U8 => reader. read_u8_array ( store , offset, elements_count) ?,
53
+ IType :: U16 => reader. read_u16_array ( store , offset, elements_count) ?,
54
+ IType :: U32 => reader. read_u32_array ( store , offset, elements_count) ?,
55
+ IType :: U64 => reader. read_u64_array ( store , offset, elements_count) ?,
56
+ IType :: F32 => reader. read_f32_array ( store , offset, elements_count) ?,
57
+ IType :: F64 => reader. read_f64_array ( store , offset, elements_count) ?,
58
+ IType :: String => read_string_array ( store , lifter, offset, elements_count) ?,
59
+ IType :: ByteArray => read_array_array ( store , lifter, & IType :: U8 , offset, elements_count) ?,
60
+ IType :: Array ( ty) => read_array_array ( store , lifter, & ty, offset, elements_count) ?,
56
61
IType :: Record ( record_type_id) => {
57
- read_record_array ( lifter, * record_type_id, offset, elements_count) ?
62
+ read_record_array ( store , lifter, * record_type_id, offset, elements_count) ?
58
63
}
59
64
} ;
60
65
61
66
Ok ( IValue :: Array ( ivalues) )
62
67
}
63
68
64
- fn read_string_array < R : RecordResolvable , MV : MemoryView > (
65
- lifter : & ILifter < ' _ , R , MV > ,
69
+ fn read_string_array < R : RecordResolvable , MV : MemoryView < Store > , Store : it_memory_traits:: Store > (
70
+ store : & mut <Store as it_memory_traits:: Store >:: ActualStore < ' _ > ,
71
+ lifter : & ILifter < ' _ , R , MV , Store > ,
66
72
offset : u32 ,
67
73
elements_count : u32 ,
68
74
) -> LiResult < Vec < IValue > > {
69
75
let mut result = Vec :: with_capacity ( elements_count as usize ) ;
70
- let seq_reader = lifter
71
- . reader
72
- . sequential_reader ( offset, ser_type_size ( & IType :: String ) * elements_count) ?;
76
+ let seq_reader = lifter. reader . sequential_reader (
77
+ store,
78
+ offset,
79
+ ser_type_size ( & IType :: String ) * elements_count,
80
+ ) ?;
73
81
74
82
for _ in 0 ..elements_count {
75
- let offset = seq_reader. read_u32 ( ) ;
76
- let size = seq_reader. read_u32 ( ) ;
83
+ let offset = seq_reader. read_u32 ( store ) ;
84
+ let size = seq_reader. read_u32 ( store ) ;
77
85
78
- let raw_str = lifter. reader . read_raw_u8_array ( offset, size) ?;
86
+ let raw_str = lifter. reader . read_raw_u8_array ( store , offset, size) ?;
79
87
let str = String :: from_utf8 ( raw_str) ?;
80
88
result. push ( IValue :: String ( str) ) ;
81
89
}
82
90
83
91
Ok ( result)
84
92
}
85
93
86
- fn read_array_array < R : RecordResolvable , MV : MemoryView > (
87
- lifter : & ILifter < ' _ , R , MV > ,
94
+ fn read_array_array < R : RecordResolvable , MV : MemoryView < Store > , Store : it_memory_traits:: Store > (
95
+ store : & mut <Store as it_memory_traits:: Store >:: ActualStore < ' _ > ,
96
+ lifter : & ILifter < ' _ , R , MV , Store > ,
88
97
ty : & IType ,
89
98
offset : u32 ,
90
99
elements_count : u32 ,
91
100
) -> LiResult < Vec < IValue > > {
92
101
let mut result = Vec :: with_capacity ( elements_count as usize ) ;
93
- let seq_reader = lifter
94
- . reader
95
- . sequential_reader ( offset, ser_type_size ( ty) * elements_count) ?;
102
+ let seq_reader =
103
+ lifter
104
+ . reader
105
+ . sequential_reader ( store, offset, ser_type_size ( ty) * elements_count) ?;
96
106
97
107
for _ in 0 ..elements_count {
98
- let offset = seq_reader. read_u32 ( ) ;
99
- let size = seq_reader. read_u32 ( ) ;
108
+ let offset = seq_reader. read_u32 ( store ) ;
109
+ let size = seq_reader. read_u32 ( store ) ;
100
110
101
- let array = array_lift_memory ( lifter, ty, offset, size) ?;
111
+ let array = array_lift_memory ( store , lifter, ty, offset, size) ?;
102
112
result. push ( array) ;
103
113
}
104
114
105
115
Ok ( result)
106
116
}
107
117
108
- fn read_record_array < R : RecordResolvable , MV : MemoryView > (
109
- lifter : & ILifter < ' _ , R , MV > ,
118
+ fn read_record_array < R : RecordResolvable , MV : MemoryView < Store > , Store : it_memory_traits:: Store > (
119
+ store : & mut <Store as it_memory_traits:: Store >:: ActualStore < ' _ > ,
120
+ lifter : & ILifter < ' _ , R , MV , Store > ,
110
121
record_type_id : u64 ,
111
122
offset : u32 ,
112
123
elements_count : u32 ,
113
124
) -> LiResult < Vec < IValue > > {
114
125
let mut result = Vec :: with_capacity ( elements_count as usize ) ;
115
- let seq_reader = lifter
116
- . reader
117
- . sequential_reader ( offset, ser_type_size ( & IType :: Record ( 0 ) ) * elements_count) ?;
126
+ let seq_reader = lifter. reader . sequential_reader (
127
+ store,
128
+ offset,
129
+ ser_type_size ( & IType :: Record ( 0 ) ) * elements_count,
130
+ ) ?;
118
131
119
132
for _ in 0 ..elements_count {
120
- let offset = seq_reader. read_u32 ( ) ;
133
+ let offset = seq_reader. read_u32 ( store ) ;
121
134
let record_ty = lifter. resolver . resolve_record ( record_type_id) ?;
122
135
123
- let record = record_lift_memory ( lifter, & record_ty, offset) ?;
136
+ let record = record_lift_memory ( store , lifter, & record_ty, offset) ?;
124
137
result. push ( record) ;
125
138
}
126
139
0 commit comments