diff options
Diffstat (limited to 'tests/auto/concurrent/testhelper_functions.h')
-rw-r--r-- | tests/auto/concurrent/testhelper_functions.h | 89 |
1 files changed, 52 insertions, 37 deletions
diff --git a/tests/auto/concurrent/testhelper_functions.h b/tests/auto/concurrent/testhelper_functions.h index aeba794977..88c2e28910 100644 --- a/tests/auto/concurrent/testhelper_functions.h +++ b/tests/auto/concurrent/testhelper_functions.h @@ -1,33 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef FUNCTIONS_H #define FUNCTIONS_H +#include <QList> + #include <vector> bool keepEvenIntegers(const int &x) @@ -44,6 +21,19 @@ public: } }; +class KeepEvenIntegersMoveOnly +{ +public: + KeepEvenIntegersMoveOnly() = default; + KeepEvenIntegersMoveOnly(KeepEvenIntegersMoveOnly &&) = default; + KeepEvenIntegersMoveOnly &operator=(KeepEvenIntegersMoveOnly &&other) = default; + + KeepEvenIntegersMoveOnly(const KeepEvenIntegersMoveOnly &) = delete; + KeepEvenIntegersMoveOnly &operator=(const KeepEvenIntegersMoveOnly &) = delete; + + bool operator()(int x) { return (x & 1) == 0; } +}; + class Number { int n; @@ -121,6 +111,19 @@ public: } }; +class IntSumReduceMoveOnly +{ +public: + IntSumReduceMoveOnly() = default; + IntSumReduceMoveOnly(IntSumReduceMoveOnly &&) = default; + IntSumReduceMoveOnly &operator=(IntSumReduceMoveOnly &&other) = default; + + IntSumReduceMoveOnly(const IntSumReduceMoveOnly &) = delete; + IntSumReduceMoveOnly &operator=(const IntSumReduceMoveOnly &) = delete; + + void operator()(int &sum, int x) { sum += x; } +}; + void numberSumReduce(int &sum, const Number &x) { sum += x.toInt(); @@ -135,34 +138,46 @@ public: } }; +template<typename T> class MoveOnlyVector { public: - using value_type = int; + using value_type = T; // rule of six MoveOnlyVector() = default; ~MoveOnlyVector() = default; - MoveOnlyVector(MoveOnlyVector &&other) = default; - MoveOnlyVector &operator=(MoveOnlyVector &&other) = default; + MoveOnlyVector(MoveOnlyVector<T> &&other) = default; + MoveOnlyVector &operator=(MoveOnlyVector<T> &&other) = default; - MoveOnlyVector(const MoveOnlyVector &) = delete; - MoveOnlyVector &operator=(const MoveOnlyVector &) = delete; + MoveOnlyVector(const MoveOnlyVector<T> &) = delete; + MoveOnlyVector &operator=(const MoveOnlyVector<T> &) = delete; // convenience for creation - explicit MoveOnlyVector(const std::vector<int> &v) : data(v) { } + explicit MoveOnlyVector(const std::vector<T> &v) : data(v) { } + void push_back(T &&el) { data.push_back(el); } + void push_back(const T &el) { data.push_back(el); } // minimal interface to be usable as a Sequence in QtConcurrent - typedef std::vector<int>::const_iterator const_iterator; - typedef std::vector<int>::iterator iterator; + typedef typename std::vector<T>::const_iterator const_iterator; + typedef typename std::vector<T>::iterator iterator; const_iterator cbegin() const { return data.cbegin(); } const_iterator cend() const { return data.cend(); } iterator begin() { return data.begin(); } iterator end() { return data.end(); } - bool operator==(const MoveOnlyVector &other) const { return data == other.data; } + const_iterator begin() const { return data.cbegin(); } + const_iterator end() const { return data.cend(); } + bool operator==(const MoveOnlyVector<T> &other) const { return data == other.data; } private: - std::vector<int> data; + std::vector<T> data; +}; + +struct NonTemplateSequence : public QList<int> +{ + NonTemplateSequence() = default; + + NonTemplateSequence(std::initializer_list<int> args) : QList(args) { } }; #endif |