This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch] First bits of the algo merge


This is pretty impressive stuff. Really nice job to both Paolo and Chris. I put on my pedantic hat and what is below is all I could find to whine about out of hundreds of changes (and I was really trying to be picky). By the end of it, my eyes were pretty blurry, so please scrutinize my complaints as much as I did your quality patch.

-Howard

On Dec 14, 2005, at 4:40 PM, Paolo Carlini wrote:

Paolo Carlini wrote:

@@ -2903,11 +2944,16 @@
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
+ typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
// concept requirements
- __glibcxx_function_requires(_LessThanComparableConcept<
- typename iterator_traits<_InputIterator1>::value_type>)
+ __glibcxx_function_requires (_LessThanComparableConcept<_ValueType1>)
+
return std::merge(__first1, __last1, __first2, __last2, __result,
- __gnu_cxx::__ops::less());
+ __gnu_cxx::__ops::less<_ValueType2, _ValueType1>());
}


/**

I'm wondering if this shouldn't be:


__glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>);

// Set algorithms: includes, set_union, set_intersection, set_difference,
@@ -3635,11 +3691,16 @@
includes(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2)
{
+ typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
// concept requirements
- __glibcxx_function_requires(_LessThanComparableConcept<
- typename iterator_traits<_InputIterator1>::value_type>)
- return std::includes(__first1, __last1, __first2, __last2,
- __gnu_cxx::__ops::less());
+ __glibcxx_function_requires (_LessThanComparableConcept<_ValueType1>)
+
+ return std::includes(__first1, __last1, __first2, __last2,
+ __gnu_cxx::__ops::less<_ValueType1, _ValueType2>());
}



And this:


__glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)



/**
@@ -3729,11 +3790,16 @@
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
+ typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
// concept requirements
- __glibcxx_function_requires(_LessThanComparableConcept<
- typename iterator_traits<_InputIterator1>::value_type>)
- return std::set_union(__first1, __last1, __first2, __last2, __result,
- __gnu_cxx::__ops::less());
+ __glibcxx_function_requires (_LessThanComparableConcept<_ValueType1>)
+
+ return std::set_union(__first1, __last1, __first2, __last2, __result,
+ __gnu_cxx::__ops::less<_ValueType1, _ValueType2>());
}

And here:


__glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)






/**
@@ -3814,11 +3880,17 @@
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
+ typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
// concept requirements
- __glibcxx_function_requires(_LessThanComparableConcept<
- typename iterator_traits<_InputIterator1>::value_type>)
+ __glibcxx_function_requires (_LessThanComparableConcept<_ValueType1>)
+
return std::set_intersection(__first1, __last1, __first2, __last2,
- __result, __gnu_cxx::__ops::less());
+ __result, __gnu_cxx::__ops::
+ less<_ValueType1, _ValueType2>());
}



And here:


__glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)


/**
@@ -3905,11 +3977,17 @@
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
+ typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
// concept requirements
- __glibcxx_function_requires(_LessThanComparableConcept<
- typename iterator_traits<_InputIterator1>::value_type>)
+ __glibcxx_function_requires (_LessThanComparableConcept<_ValueType1>)
+
return std::set_difference(__first1, __last1, __first2, __last2,
- __result, __gnu_cxx::__ops::less());
+ __result, __gnu_cxx::__ops::
+ less<_ValueType1, _ValueType2>());
}

And here:


__glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)




/**
@@ -3998,11 +4076,16 @@
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
+ typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+ typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+
// concept requirements
- __glibcxx_function_requires(_LessThanComparableConcept<
- typename iterator_traits<_InputIterator1>::value_type>)
+ __glibcxx_function_requires (_LessThanComparableConcept<_ValueType1>)
return std::set_symmetric_difference(__first1, __last1, __first2, __last2,
- __result, __gnu_cxx::__ops::less());
+ __result, __gnu_cxx::__ops::
+ less<_ValueType1, _ValueType2>());
}

And here:


__glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)


} // namespace std
Index: src/string-inst.cc
===================================================================
--- src/string-inst.cc (revision 106945)
+++ src/string-inst.cc (working copy)
@@ -76,7 +76,7 @@
template
const C*
__find_if(const C*, const C*,
- __gnu_cxx::__ops::__bind2nd<bool(*)(const C&, const C&), C>,
+ __gnu_cxx::__ops::__bind2nd<C, C, bool(*)(const C&, const C&)>,
random_access_iterator_tag);
} // namespace std

I think a typeo here, not positive:


__gnu_cxx::__ops::__bind2nd<C, bool(*)(const C&, const C&)>,

-Howard


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]