mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	Simplify set entry insertion logic. (GH-19881)
This commit is contained in:
		
							parent
							
								
									21893fbb74
								
							
						
					
					
						commit
						3dd2157feb
					
				
					 1 changed files with 2 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -137,7 +137,6 @@ static int
 | 
			
		|||
set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 | 
			
		||||
{
 | 
			
		||||
    setentry *table;
 | 
			
		||||
    setentry *freeslot;
 | 
			
		||||
    setentry *entry;
 | 
			
		||||
    size_t perturb;
 | 
			
		||||
    size_t mask;
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +157,6 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 | 
			
		|||
    if (entry->key == NULL)
 | 
			
		||||
        goto found_unused;
 | 
			
		||||
 | 
			
		||||
    freeslot = NULL;
 | 
			
		||||
    perturb = hash;
 | 
			
		||||
 | 
			
		||||
    while (1) {
 | 
			
		||||
| 
						 | 
				
			
			@ -187,14 +185,12 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 | 
			
		|||
                goto restart;
 | 
			
		||||
            mask = so->mask;                 /* help avoid a register spill */
 | 
			
		||||
        }
 | 
			
		||||
        else if (entry->hash == -1)
 | 
			
		||||
            freeslot = entry;
 | 
			
		||||
 | 
			
		||||
        if (i + LINEAR_PROBES <= mask) {
 | 
			
		||||
            for (j = 0 ; j < LINEAR_PROBES ; j++) {
 | 
			
		||||
                entry++;
 | 
			
		||||
                if (entry->hash == 0 && entry->key == NULL)
 | 
			
		||||
                    goto found_unused_or_dummy;
 | 
			
		||||
                    goto found_unused;
 | 
			
		||||
                if (entry->hash == hash) {
 | 
			
		||||
                    PyObject *startkey = entry->key;
 | 
			
		||||
                    assert(startkey != dummy);
 | 
			
		||||
| 
						 | 
				
			
			@ -216,8 +212,6 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 | 
			
		|||
                        goto restart;
 | 
			
		||||
                    mask = so->mask;
 | 
			
		||||
                }
 | 
			
		||||
                else if (entry->hash == -1)
 | 
			
		||||
                    freeslot = entry;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -226,17 +220,9 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 | 
			
		|||
 | 
			
		||||
        entry = &so->table[i];
 | 
			
		||||
        if (entry->key == NULL)
 | 
			
		||||
            goto found_unused_or_dummy;
 | 
			
		||||
            goto found_unused;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  found_unused_or_dummy:
 | 
			
		||||
    if (freeslot == NULL)
 | 
			
		||||
        goto found_unused;
 | 
			
		||||
    so->used++;
 | 
			
		||||
    freeslot->key = key;
 | 
			
		||||
    freeslot->hash = hash;
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  found_unused:
 | 
			
		||||
    so->fill++;
 | 
			
		||||
    so->used++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue