[Patch] First bits of the algo merge

Howard Hinnant hhinnant@apple.com
Thu Dec 15 02:42:00 GMT 2005


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



More information about the Libstdc++ mailing list