mirror of
https://github.com/crystalidea/qt-build-tools.git
synced 2024-10-30 16:07:36 +08:00
5.15.14 - original headers
This commit is contained in:
parent
134b1cc523
commit
69947bd64a
101
5.15.14/qtbase/src/corelib/global/qduplicatetracker_p.h
Normal file
101
5.15.14/qtbase/src/corelib/global/qduplicatetracker_p.h
Normal file
@ -0,0 +1,101 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:COMM$
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
****************************************************************************/
|
||||
#ifndef QDUPLICATETRACKER_P_H
|
||||
#define QDUPLICATETRACKER_P_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include <qglobal.h>
|
||||
|
||||
#if QT_HAS_INCLUDE(<memory_resource>) && __cplusplus > 201402L
|
||||
# include <unordered_set>
|
||||
# include <memory_resource>
|
||||
#else
|
||||
# include <qset.h>
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
template <typename T, size_t Prealloc = 32>
|
||||
class QDuplicateTracker {
|
||||
#ifdef __cpp_lib_memory_resource
|
||||
struct node_guesstimate { void *next; size_t hash; T value; };
|
||||
static constexpr size_t bufferSize(size_t N) {
|
||||
return N * sizeof(void*) // bucket list
|
||||
+ N * sizeof(node_guesstimate); // nodes
|
||||
}
|
||||
|
||||
char buffer[bufferSize(Prealloc)];
|
||||
std::pmr::monotonic_buffer_resource res{buffer, sizeof buffer};
|
||||
std::pmr::unordered_set<T> set{Prealloc, &res};
|
||||
#else
|
||||
static QSet<T> makeQSet() { QSet<T> r; r.reserve(Prealloc); return r; }
|
||||
QSet<T> set = makeQSet();
|
||||
int setSize = 0;
|
||||
#endif
|
||||
Q_DISABLE_COPY_MOVE(QDuplicateTracker);
|
||||
public:
|
||||
QDuplicateTracker() = default;
|
||||
void reserve(int n) { set.reserve(n); }
|
||||
Q_REQUIRED_RESULT bool hasSeen(const T &s)
|
||||
{
|
||||
bool inserted;
|
||||
#ifdef __cpp_lib_memory_resource
|
||||
inserted = set.insert(s).second;
|
||||
#else
|
||||
set.insert(s);
|
||||
const int n = set.size();
|
||||
inserted = qExchange(setSize, n) != n;
|
||||
#endif
|
||||
return !inserted;
|
||||
}
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif /* QDUPLICATETRACKER_P_H */
|
1408
5.15.14/qtbase/src/corelib/qcompilerdetection.h
Normal file
1408
5.15.14/qtbase/src/corelib/qcompilerdetection.h
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user