@@ -128,16 +128,13 @@ impl<K: DepKind> SerializedDepGraph<K> {
128
128
}
129
129
130
130
#[ inline]
131
- pub fn edge_targets_from ( & self , source : SerializedDepNodeIndex ) -> & [ SerializedDepNodeIndex ] {
131
+ pub fn edge_targets_from ( & self , source : SerializedDepNodeIndex ) -> Vec < SerializedDepNodeIndex > {
132
132
// The encoder has checked that there is no padding there.
133
- if let Some ( decoder) = self . decoder_at ( source) {
134
- let position = std:: mem:: size_of :: < Fingerprint > ( ) ;
135
- let & length = unsafe { decoder. mmap_at :: < u32 > ( position) } ;
136
- unsafe {
137
- decoder. mmap_slice_at :: < SerializedDepNodeIndex > ( position + 4 , length as usize )
138
- }
133
+ if let Some ( ref mut decoder) = self . decoder_at ( source) {
134
+ decoder. set_position ( std:: mem:: size_of :: < Fingerprint > ( ) ) ;
135
+ Decodable :: decode ( decoder)
139
136
} else {
140
- & [ ]
137
+ Vec :: new ( )
141
138
}
142
139
}
143
140
@@ -196,10 +193,9 @@ impl<K: DepKind> EncoderState<K> {
196
193
fn try_encode_node ( & mut self , node : & NodeInfo < K > ) -> usize {
197
194
let encoder = & mut self . encoder ;
198
195
let start_pos = encoder. write_mmap ( & node. fingerprint ) ;
199
- let _pos = encoder. write_mmap :: < u32 > ( & node . edges . len ( ) . try_into ( ) . unwrap ( ) ) ;
196
+ let _pos = encoder. position ( ) ;
200
197
debug_assert_eq ! ( _pos, start_pos + std:: mem:: size_of:: <Fingerprint >( ) ) ;
201
- let _pos = encoder. write_mmap_slice :: < DepNodeIndex > ( & node. edges [ ..] ) ;
202
- debug_assert_eq ! ( _pos, start_pos + std:: mem:: size_of:: <Fingerprint >( ) + 4 ) ;
198
+ node. edges . encode ( encoder) ;
203
199
start_pos
204
200
}
205
201
0 commit comments