Special-case size-1 sequential hopscotch hash table
Rather than allocate a HH_HOP_RANGE large array of buckets, allocate just 1 if the initial size is 1, then jump to HH_HOP_RANGE as soon as a second element is added to the table. There are quite a few cases where hash tables are created where there never be more than 1 (or even 0) elements in the table (e.g., a writer without readers, a reader for a keyless topic). Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
		
							parent
							
								
									0b8fd9fcc0
								
							
						
					
					
						commit
						0e888eb2ec
					
				
					 2 changed files with 55 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -366,11 +366,11 @@ struct whc *whc_new (int is_transient_local, uint32_t hdepth, uint32_t tldepth)
 | 
			
		|||
#if USE_EHH
 | 
			
		||||
  whc->seq_hash = ddsrt_ehh_new (sizeof (struct whc_seq_entry), 32, whc_seq_entry_hash, whc_seq_entry_eq);
 | 
			
		||||
#else
 | 
			
		||||
  whc->seq_hash = ddsrt_hh_new (32, whc_node_hash, whc_node_eq);
 | 
			
		||||
  whc->seq_hash = ddsrt_hh_new (1, whc_node_hash, whc_node_eq);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  if (whc->idxdepth > 0)
 | 
			
		||||
    whc->idx_hash = ddsrt_hh_new (32, whc_idxnode_hash_key, whc_idxnode_eq_key);
 | 
			
		||||
    whc->idx_hash = ddsrt_hh_new (1, whc_idxnode_hash_key, whc_idxnode_eq_key);
 | 
			
		||||
  else
 | 
			
		||||
    whc->idx_hash = NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue