diff options
Diffstat (limited to 'gnome-base/nautilus/files/nautilus-2.16.3-g_sequence_insert_sorted-perf.patch')
-rw-r--r-- | gnome-base/nautilus/files/nautilus-2.16.3-g_sequence_insert_sorted-perf.patch | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/gnome-base/nautilus/files/nautilus-2.16.3-g_sequence_insert_sorted-perf.patch b/gnome-base/nautilus/files/nautilus-2.16.3-g_sequence_insert_sorted-perf.patch new file mode 100644 index 0000000..9114d9c --- /dev/null +++ b/gnome-base/nautilus/files/nautilus-2.16.3-g_sequence_insert_sorted-perf.patch @@ -0,0 +1,191 @@ +http://svn.gnome.org/viewcvs/nautilus?rev=12624&view=rev +http://bugzilla.gnome.org/show_bug.cgi?id=350579 + +Index: cut-n-paste-code/gsequence/gsequence.c +=================================================================== +--- cut-n-paste-code/gsequence/gsequence.c (revision 12623) ++++ cut-n-paste-code/gsequence/gsequence.c (revision 12624) +@@ -51,6 +51,7 @@ + gint pos); + static GSequenceNode *node_find_closest (GSequenceNode *haystack, + GSequenceNode *needle, ++ GSequenceNode *end, + GSequenceIterCompareFunc cmp, + gpointer user_data); + static gint node_get_length (GSequenceNode *node); +@@ -64,6 +65,7 @@ + static void node_unlink (GSequenceNode *node); + static void node_insert_sorted (GSequenceNode *node, + GSequenceNode *new, ++ GSequenceNode *end, + GSequenceIterCompareFunc cmp_func, + gpointer cmp_data); + +@@ -411,6 +413,7 @@ + { + GCompareDataFunc cmp_func; + gpointer cmp_data; ++ GSequenceNode *end_node; + } SortInfo; + + /* This function compares two iters using a normal compare +@@ -424,10 +427,10 @@ + const SortInfo *info = data; + gint retval; + +- if (is_end (node1)) ++ if (node1 == info->end_node) + return 1; + +- if (is_end (node2)) ++ if (node2 == info->end_node) + return -1; + + retval = info->cmp_func (node1->data, node2->data, info->cmp_data); +@@ -452,7 +455,7 @@ + GCompareDataFunc cmp_func, + gpointer cmp_data) + { +- SortInfo info = { cmp_func, cmp_data }; ++ SortInfo info = { cmp_func, cmp_data, seq->end_node }; + + check_seq_access (seq); + +@@ -480,11 +483,12 @@ + GCompareDataFunc cmp_func, + gpointer cmp_data) + { +- SortInfo info = { cmp_func, cmp_data }; ++ SortInfo info = { cmp_func, cmp_data, NULL }; + + g_return_val_if_fail (seq != NULL, NULL); + g_return_val_if_fail (cmp_func != NULL, NULL); + ++ info.end_node = seq->end_node; + check_seq_access (seq); + + return g_sequence_insert_sorted_iter (seq, data, iter_compare, &info); +@@ -495,10 +499,11 @@ + GCompareDataFunc cmp_func, + gpointer cmp_data) + { +- SortInfo info = { cmp_func, cmp_data }; ++ SortInfo info = { cmp_func, cmp_data, NULL }; + + g_return_if_fail (!is_end (iter)); + ++ info.end_node = get_sequence (iter)->end_node; + check_iter_access (iter); + + g_sequence_sort_changed_iter (iter, iter_compare, &info); +@@ -533,7 +538,7 @@ + + node_unlink (node); + +- node_insert_sorted (seq->end_node, node, cmp_func, cmp_data); ++ node_insert_sorted (seq->end_node, node, seq->end_node, cmp_func, cmp_data); + } + + tmp->access_prohibited = FALSE; +@@ -558,7 +563,7 @@ + seq->access_prohibited = TRUE; + + node_unlink (iter); +- node_insert_sorted (seq->end_node, iter, iter_cmp, cmp_data); ++ node_insert_sorted (seq->end_node, iter, seq->end_node, iter_cmp, cmp_data); + + seq->access_prohibited = FALSE; + } +@@ -574,7 +579,7 @@ + check_seq_access (seq); + + new_node = node_new (data); +- node_insert_sorted (seq->end_node, new_node, iter_cmp, cmp_data); ++ node_insert_sorted (seq->end_node, new_node, seq->end_node, iter_cmp, cmp_data); + return new_node; + } + +@@ -595,7 +600,7 @@ + + dummy = node_new (data); + +- node = node_find_closest (seq->end_node, dummy, cmp_func, cmp_data); ++ node = node_find_closest (seq->end_node, dummy, seq->end_node, cmp_func, cmp_data); + + node_free (dummy, NULL); + +@@ -624,10 +629,11 @@ + GCompareDataFunc cmp_func, + gpointer cmp_data) + { +- SortInfo info = { cmp_func, cmp_data }; ++ SortInfo info = { cmp_func, cmp_data, NULL }; + + g_return_val_if_fail (seq != NULL, NULL); + ++ info.end_node = seq->end_node; + check_seq_access (seq); + + return g_sequence_search_iter (seq, data, iter_compare, &info); +@@ -1109,6 +1115,7 @@ + static GSequenceNode * + node_find_closest (GSequenceNode *haystack, + GSequenceNode *needle, ++ GSequenceNode *end, + GSequenceIterCompareFunc cmp_func, + gpointer cmp_data) + { +@@ -1123,7 +1130,7 @@ + { + best = haystack; + +- if (is_end (haystack)) ++ if (haystack == end) + c = 1; + else + c = cmp_func (haystack, needle, cmp_data); +@@ -1285,12 +1292,13 @@ + static void + node_insert_sorted (GSequenceNode *node, + GSequenceNode *new, ++ GSequenceNode *end, + GSequenceIterCompareFunc cmp_func, + gpointer cmp_data) + { + GSequenceNode *closest; + +- closest = node_find_closest (node, new, cmp_func, cmp_data); ++ closest = node_find_closest (node, new, end, cmp_func, cmp_data); + + node_insert_before (closest, new); + } +Index: cut-n-paste-code/gsequence/gsequence.h +=================================================================== +--- cut-n-paste-code/gsequence/gsequence.h (revision 12623) ++++ cut-n-paste-code/gsequence/gsequence.h (revision 12624) +@@ -26,6 +26,7 @@ + typedef struct _GSequenceNode GSequenceIter; + + ++ + typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a, + GSequenceIter *b, + gpointer data); +@@ -65,6 +66,8 @@ + gpointer data); + void g_sequence_move (GSequenceIter * src, + GSequenceIter * dest); ++void g_sequence_swap (GSequenceIter * a, ++ GSequenceIter * b); + GSequenceIter *g_sequence_insert_sorted (GSequence *seq, + gpointer data, + GCompareDataFunc cmp_func, +@@ -110,8 +113,6 @@ + GSequenceIter *g_sequence_iter_move (GSequenceIter * iter, + gint leap); + GSequence * g_sequence_iter_get_sequence (GSequenceIter * iter); +-void g_sequence_swap (GSequenceIter *a, +- GSequenceIter *b); + + + /* search */ |