summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qarraydataops.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qarraydataops.h')
-rw-r--r--src/corelib/tools/qarraydataops.h37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h
index 1fd7e99c42e..2162512883a 100644
--- a/src/corelib/tools/qarraydataops.h
+++ b/src/corelib/tools/qarraydataops.h
@@ -356,7 +356,6 @@ public:
*where++ = t;
}
-
template <typename ...Args>
void emplace(T *where, Args&&... args)
{ emplace(GrowsForwardTag{}, where, std::forward<Args>(args)...); }
@@ -760,13 +759,12 @@ public:
}
}
-
- template <typename iterator, typename ...Args>
- void emplace(iterator where, Args&&... args)
+ template<typename... Args>
+ void emplace(T *where, Args &&... args)
{ emplace(GrowsForwardTag{}, where, std::forward<Args>(args)...); }
- template <typename iterator, typename ...Args>
- void emplace(GrowsForwardTag, iterator where, Args&&... args)
+ template<typename... Args>
+ void emplace(GrowsForwardTag, T *where, Args &&... args)
{
Q_ASSERT(!this->isShared());
Q_ASSERT(where >= this->begin() && where <= this->end());
@@ -799,8 +797,8 @@ public:
}
}
- template <typename iterator, typename ...Args>
- void emplace(GrowsBackwardsTag, iterator where, Args&&... args)
+ template<typename... Args>
+ void emplace(GrowsBackwardsTag, T *where, Args &&... args)
{
Q_ASSERT(!this->isShared());
Q_ASSERT(where >= this->begin() && where <= this->end());
@@ -1043,14 +1041,14 @@ public:
// use moving insert
using QGenericArrayOps<T>::insert;
- template<typename iterator, typename... Args>
- void emplace(iterator where, Args &&... args)
+ template<typename... Args>
+ void emplace(T *where, Args &&... args)
{
emplace(GrowsForwardTag {}, where, std::forward<Args>(args)...);
}
- template<typename iterator, typename... Args>
- void emplace(GrowsForwardTag, iterator where, Args &&... args)
+ template<typename... Args>
+ void emplace(GrowsForwardTag, T *where, Args &&... args)
{
Q_ASSERT(!this->isShared());
Q_ASSERT(where >= this->begin() && where <= this->end());
@@ -1068,8 +1066,8 @@ public:
++this->size;
}
- template<typename iterator, typename... Args>
- void emplace(GrowsBackwardsTag, iterator where, Args &&... args)
+ template<typename... Args>
+ void emplace(GrowsBackwardsTag, T *where, Args &&... args)
{
Q_ASSERT(!this->isShared());
Q_ASSERT(where >= this->begin() && where <= this->end());
@@ -1367,18 +1365,19 @@ public:
}
-
- template <typename iterator, typename ...Args>
- void emplace(iterator where, Args&&... args)
+ template<typename... Args>
+ void emplace(T *where, Args &&... args)
{
Q_ASSERT(!this->isShared());
Q_ASSERT(where >= this->begin() && where <= this->end());
Q_ASSERT(this->allocatedCapacity() - this->size >= 1);
+ const T *begin = this->begin();
+ const T *end = this->end();
// Qt5 QList in insert(1): try to move less data around
// Now:
- const bool shouldInsertAtBegin = (where - this->begin()) < (this->end() - where)
- || this->freeSpaceAtEnd() <= 0;
+ const bool shouldInsertAtBegin =
+ (where - begin) < (end - where) || this->freeSpaceAtEnd() <= 0;
if (this->freeSpaceAtBegin() > 0 && shouldInsertAtBegin) {
Base::emplace(GrowsBackwardsTag{}, where, std::forward<Args>(args)...);
} else {