40 #ifndef QTCONCURRENT_MEDIAN_H    41 #define QTCONCURRENT_MEDIAN_H    43 #include <QtConcurrent/qtconcurrent_global.h>    45 #if !defined(QT_NO_CONCURRENT) ||defined(Q_CLANG_QDOC)    47 #include <QtCore/qvector.h>    62         : currentMedian(), bufferSize(_bufferSize), currentIndex(0), valid(false), dirty(true)
    64         values.resize(bufferSize);
    77         currentIndex = ((currentIndex + 1) % bufferSize);
    78         if (valid == 
false && currentIndex % bufferSize == 0)
    84         const T currentIndexValue = values[currentIndex];
    85         if ((currentIndexValue > currentMedian && currentMedian > value)
    86             || (currentMedian > currentIndexValue && value > currentMedian)) {
    90         values[currentIndex] = value;
   107 #if defined(__GLIBCXX__) && __GLIBCXX__ <= 20140107   108             QVector<T> sorted = values;
   109             std::sort(sorted.begin(), sorted.end());
   110             currentMedian = sorted.at(bufferSize / 2);
   112             QVector<T> copy = values;
   113             typename QVector<T>::iterator begin = copy.begin(), mid = copy.begin() + bufferSize/2, end = copy.end();
   114             std::nth_element(begin, mid, end);
   115             currentMedian = *mid;
   118         return currentMedian;
   133     enum { BufferSize = 7 };
   136         : currentMedian(), currentIndex(0), valid(false), dirty(true)
   138         std::fill_n(values, static_cast<int>(BufferSize), 0.0);
   143         std::fill_n(values, static_cast<int>(BufferSize), 0.0);
   152         if (currentIndex == BufferSize) {
   160         const double currentIndexValue = values[currentIndex];
   161         if ((currentIndexValue > currentMedian && currentMedian > value)
   162             || (currentMedian > currentIndexValue && value > currentMedian)) {
   166         values[currentIndex] = value;
   179             double sorted[BufferSize];
   180             ::memcpy(&sorted, &values, 
sizeof(sorted));
   181             std::sort(sorted, sorted + static_cast<int>(BufferSize));
   182             currentMedian = sorted[BufferSize / 2];
   185         return currentMedian;
   189     double values[BufferSize];
   190     double currentMedian;
   201 #endif // QT_NO_CONCURRENT 
The QtConcurrent namespace provides high-level APIs that make it possible to write multi-threaded pro...
Definition: qtconcurrentexception.h:51