@@ -298,14 +298,19 @@ impl Object {
298298 /// to be a `&str` slice and not an owned `String`. The internals of
299299 /// `Object` will handle the heap allocation of the key if needed for
300300 /// better performance.
301+ #[ inline]
301302 pub fn insert ( & mut self , key : & str , value : JsonValue ) {
303+ self . insert_index ( key, value) ;
304+ }
305+
306+ pub ( crate ) fn insert_index ( & mut self , key : & str , value : JsonValue ) -> usize {
302307 let key = key. as_bytes ( ) ;
303308 let hash = hash_key ( key) ;
304309
305310 if self . store . len ( ) == 0 {
306311 self . store . push ( Node :: new ( value, hash, key. len ( ) ) ) ;
307312 self . store [ 0 ] . key . attach ( key) ;
308- return ;
313+ return 0 ;
309314 }
310315
311316 let mut node = unsafe { & mut * self . node_at_index_mut ( 0 ) } ;
@@ -314,28 +319,38 @@ impl Object {
314319 loop {
315320 if hash == node. key . hash && key == node. key . as_bytes ( ) {
316321 node. value = value;
317- return ;
322+ return parent ;
318323 } else if hash < node. key . hash {
319324 if node. left != 0 {
320325 parent = node. left ;
321326 node = unsafe { & mut * self . node_at_index_mut ( node. left ) } ;
322327 continue ;
323328 }
324- self . store [ parent] . left = self . add_node ( key, value, hash) ;
325- return ;
329+ let index = self . add_node ( key, value, hash) ;
330+ self . store [ parent] . left = index;
331+
332+ return index;
326333 } else {
327334 if node. right != 0 {
328335 parent = node. right ;
329336 node = unsafe { & mut * self . node_at_index_mut ( node. right ) } ;
330337 continue ;
331338 }
332- self . store [ parent] . right = self . add_node ( key, value, hash) ;
333- return ;
339+ let index = self . add_node ( key, value, hash) ;
340+ self . store [ parent] . right = index;
341+
342+ return index;
334343 }
335344 }
336345 }
337346
338347 #[ inline]
348+ pub ( crate ) fn override_at ( & mut self , index : usize , value : JsonValue ) {
349+ self . store [ index] . value = value;
350+ }
351+
352+ #[ inline]
353+ #[ deprecated( since="0.11.11" , note="Was only meant for internal use" ) ]
339354 pub fn override_last ( & mut self , value : JsonValue ) {
340355 if let Some ( node) = self . store . last_mut ( ) {
341356 node. value = value;
0 commit comments