parallel equal not parallel

François Dumont francois.cppdevs@free.fr
Thu Nov 4 20:49:00 GMT 2010


Hi

     I noticed a weird thing in parallel mode code when working on a 
patch some weeks ago and I finally take time to report it here. I cannot 
build the lib for the moment so I prefer not to submit a patch, if you 
confirm the problem I will submit a patch if no one else wants to do so 
before I.

     Here is the parallel equal implementation in 
include/parallel/algobase.h:

   template<typename _IIter1, typename _IIter2>
     inline bool
     equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2)
     {
       return _GLIBCXX_STD_P::mismatch(__begin1, __end1, __begin2).first
               == __end1;
     }

   template<typename _IIter1, typename _IIter2, typename _Predicate>
     inline bool
     equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
           _Predicate __pred)
     {
       return _GLIBCXX_STD_P::mismatch(__begin1, __end1, __begin2, 
__pred).first
               == __end1;
     }

So it uses the normal mismatch algo, IMO it should be:

   template<typename _IIter1, typename _IIter2>
     inline bool
     equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2)
     {
       return mismatch(__begin1, __end1, __begin2).first == __end1;
     }

   template<typename _IIter1, typename _IIter2, typename _Predicate>
     inline bool
     equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
           _Predicate __pred)
     {
       return mismatch(__begin1, __end1, __begin2, __pred).first == __end1;
     }

Agree ?

François



More information about the Libstdc++ mailing list