@@ -193,43 +193,32 @@ impl IndexBuilder {
193193 }
194194 }
195195
196+ #[ must_use]
197+ fn push_segment ( & mut self , segment : & [ u8 ] , label_idx : u8 ) -> Label {
198+ if let Some ( ( entry_idx, label_idx) ) = self . label_cache . get ( segment) {
199+ return Label :: Reference ( Reference {
200+ entry_idx : * entry_idx as u64 ,
201+ label_idx : * label_idx,
202+ } ) ;
203+ }
204+
205+ self
206+ . label_cache
207+ . insert ( segment. to_vec ( ) , ( self . index . entries . len ( ) , label_idx) ) ;
208+
209+ Label :: InPlace ( segment. to_vec ( ) )
210+ }
211+
196212 pub fn push ( & mut self , scope_id : u8 , name : & str ) {
197213 // optimize, if there is no dot in the name, compression does not make sense
198214 let labels = if name. contains ( '.' ) {
199215 name
200216 . split ( '.' )
201217 . enumerate ( )
202- . map ( |( label_idx, segment) | {
203- let segment = segment. as_bytes ( ) ;
204-
205- if let Some ( ( entry_idx, label_idx) ) = self . label_cache . get ( segment) {
206- return Label :: Reference ( Reference {
207- entry_idx : * entry_idx as u64 ,
208- label_idx : * label_idx,
209- } ) ;
210- }
211-
212- self
213- . label_cache
214- . insert ( segment. to_vec ( ) , ( self . index . entries . len ( ) , label_idx as u8 ) ) ;
215-
216- Label :: InPlace ( segment. to_vec ( ) )
217- } )
218+ . map ( |( label_idx, segment) | self . push_segment ( segment. as_bytes ( ) , label_idx as u8 ) )
218219 . collect ( )
219220 } else {
220- let segment = name. as_bytes ( ) ;
221-
222- if let Some ( ( entry_idx, label_idx) ) = self . label_cache . get ( segment) {
223- vec ! [ Label :: Reference ( Reference {
224- entry_idx: * entry_idx as u64 ,
225- label_idx: * label_idx,
226- } ) ]
227- } else {
228- self
229- . label_cache
230- . insert ( segment. to_vec ( ) , ( self . index . entries . len ( ) , 0 ) ) ;
231- vec ! [ Label :: InPlace ( name. into( ) ) ]
232- }
221+ vec ! [ self . push_segment( name. as_bytes( ) , 0 ) ]
233222 } ;
234223
235224 self . index . entries . push ( Entry { scope_id, labels } ) ;
0 commit comments