Commit d76575ca by Johannes Singler Committed by Johannes Singler

multiway_merge.h: More robust finding of an arbitrary existing element inside the input sequences.

2007-11-14  Johannes Singler  <singler@ira.uka.de>

      * include/parallel/multiway_merge.h: More robust finding of an
        arbitrary existing element inside the input sequences.
      * include/bits/stl_algo.h: Fix typo to actually call appropriate
        sequential version.

From-SVN: r130183
parent 6c74788e
2007-11-14 Johannes Singler <singler@ira.uka.de>
* include/parallel/multiway_merge.h: More robust finding of an
arbitrary existing element inside the input sequences.
* include/bits/stl_algo.h: Fix typo to actually call appropriate
sequential version.
2007-11-13 Benjamin Kosnik <bkoz@redhat.com> 2007-11-13 Benjamin Kosnik <bkoz@redhat.com>
* docs/html/documentation.html: First pass at unified table of contents. * docs/html/documentation.html: First pass at unified table of contents.
......
...@@ -2028,7 +2028,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -2028,7 +2028,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ {
if (__depth_limit == 0) if (__depth_limit == 0)
{ {
_GLIBCXX_STD_P:partial_sort(__first, __last, __last); _GLIBCXX_STD_P::partial_sort(__first, __last, __last);
return; return;
} }
--__depth_limit; --__depth_limit;
......
...@@ -900,25 +900,34 @@ namespace __gnu_parallel ...@@ -900,25 +900,34 @@ namespace __gnu_parallel
difference_type total_length = 0; difference_type total_length = 0;
// Default value for potentially non-default-constructible types. // Default value for potentially non-default-constructible types.
value_type* defaultcons = NULL; value_type* arbitrary_element = NULL;
for (int t = 0; t < k; t++) for (int t = 0; t < k; t++)
{ {
if (stable) if(arbitrary_element == NULL && LENGTH(seqs_begin[t]) > 0)
{ arbitrary_element = &(*seqs_begin[t].first);
if (seqs_begin[t].first == seqs_begin[t].second) total_length += LENGTH(seqs_begin[t]);
lt.insert_start_stable(*defaultcons, t, true); }
else
lt.insert_start_stable(*seqs_begin[t].first, t, false);
}
else
{
if (seqs_begin[t].first == seqs_begin[t].second)
lt.insert_start(*defaultcons, t, true);
else
lt.insert_start(*seqs_begin[t].first, t, false);
}
total_length += LENGTH(seqs_begin[t]); if(total_length == 0)
return target;
for (int t = 0; t < k; t++)
{
if (stable)
{
if (seqs_begin[t].first == seqs_begin[t].second)
lt.insert_start_stable(*arbitrary_element, t, true);
else
lt.insert_start_stable(*seqs_begin[t].first, t, false);
}
else
{
if (seqs_begin[t].first == seqs_begin[t].second)
lt.insert_start(*arbitrary_element, t, true);
else
lt.insert_start(*seqs_begin[t].first, t, false);
}
} }
if (stable) if (stable)
...@@ -941,7 +950,7 @@ namespace __gnu_parallel ...@@ -941,7 +950,7 @@ namespace __gnu_parallel
// Feed. // Feed.
if (seqs_begin[source].first == seqs_begin[source].second) if (seqs_begin[source].first == seqs_begin[source].second)
lt.delete_min_insert_stable(*defaultcons, true); lt.delete_min_insert_stable(*arbitrary_element, true);
else else
// Replace from same source. // Replace from same source.
lt.delete_min_insert_stable(*seqs_begin[source].first, false); lt.delete_min_insert_stable(*seqs_begin[source].first, false);
...@@ -959,7 +968,7 @@ namespace __gnu_parallel ...@@ -959,7 +968,7 @@ namespace __gnu_parallel
// Feed. // Feed.
if (seqs_begin[source].first == seqs_begin[source].second) if (seqs_begin[source].first == seqs_begin[source].second)
lt.delete_min_insert(*defaultcons, true); lt.delete_min_insert(*arbitrary_element, true);
else else
// Replace from same source. // Replace from same source.
lt.delete_min_insert(*seqs_begin[source].first, false); lt.delete_min_insert(*seqs_begin[source].first, false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment