mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-10-05 13:19:21 +02:00
Merge branch '#0434_GSequenceSlowsDown_counter' into 'main'
gsequence: make treap priorities more random to avoid worst-case scenarios Closes #2468 See merge request GNOME/glib!2236
This commit is contained in:
@@ -15,7 +15,8 @@ struct _GSequence
|
||||
|
||||
struct _GSequenceNode
|
||||
{
|
||||
guint n_nodes;
|
||||
gint n_nodes;
|
||||
guint32 priority;
|
||||
GSequenceNode * parent;
|
||||
GSequenceNode * left;
|
||||
GSequenceNode * right;
|
||||
@@ -25,15 +26,9 @@ struct _GSequenceNode
|
||||
static guint
|
||||
get_priority (GSequenceNode *node)
|
||||
{
|
||||
guint key = GPOINTER_TO_UINT (node);
|
||||
|
||||
key = (key << 15) - key - 1;
|
||||
key = key ^ (key >> 12);
|
||||
key = key + (key << 2);
|
||||
key = key ^ (key >> 4);
|
||||
key = key + (key << 3) + (key << 11);
|
||||
key = key ^ (key >> 16);
|
||||
guint key = node->priority;
|
||||
|
||||
/* We rely on 0 being less than all other priorities */
|
||||
return key? key : 1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user