OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1106 // iterators (for appendRange) to the back. The elements will be copied. | 1106 // iterators (for appendRange) to the back. The elements will be copied. |
1107 // uncheckedAppend(value) | 1107 // uncheckedAppend(value) |
1108 // Insert a single element like push_back(), but this function assumes | 1108 // Insert a single element like push_back(), but this function assumes |
1109 // the vector has enough capacity such that it can store the new element | 1109 // the vector has enough capacity such that it can store the new element |
1110 // without a reallocation. Using this function could improve the | 1110 // without a reallocation. Using this function could improve the |
1111 // performance when you append many elements repeatedly. | 1111 // performance when you append many elements repeatedly. |
1112 template <typename U> | 1112 template <typename U> |
1113 void push_back(U&&); | 1113 void push_back(U&&); |
1114 template <typename... Args> | 1114 template <typename... Args> |
1115 T& emplace_back(Args&&...); | 1115 T& emplace_back(Args&&...); |
| 1116 ALWAYS_INLINE T& emplace_back() { |
| 1117 grow(m_size + 1); |
| 1118 return back(); |
| 1119 } |
1116 template <typename U> | 1120 template <typename U> |
1117 void append(const U*, size_t); | 1121 void append(const U*, size_t); |
1118 template <typename U, size_t otherCapacity, typename V> | 1122 template <typename U, size_t otherCapacity, typename V> |
1119 void appendVector(const Vector<U, otherCapacity, V>&); | 1123 void appendVector(const Vector<U, otherCapacity, V>&); |
1120 template <typename Iterator> | 1124 template <typename Iterator> |
1121 void appendRange(Iterator begin, Iterator end); | 1125 void appendRange(Iterator begin, Iterator end); |
1122 template <typename U> | 1126 template <typename U> |
1123 void uncheckedAppend(U&&); | 1127 void uncheckedAppend(U&&); |
1124 | 1128 |
1125 // Insertion to an arbitrary position. All of these functions will take | 1129 // Insertion to an arbitrary position. All of these functions will take |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1660 return; | 1664 return; |
1661 } | 1665 } |
1662 | 1666 |
1663 appendSlowCase(std::forward<U>(val)); | 1667 appendSlowCase(std::forward<U>(val)); |
1664 } | 1668 } |
1665 | 1669 |
1666 template <typename T, size_t inlineCapacity, typename Allocator> | 1670 template <typename T, size_t inlineCapacity, typename Allocator> |
1667 template <typename... Args> | 1671 template <typename... Args> |
1668 ALWAYS_INLINE T& Vector<T, inlineCapacity, Allocator>::emplace_back( | 1672 ALWAYS_INLINE T& Vector<T, inlineCapacity, Allocator>::emplace_back( |
1669 Args&&... args) { | 1673 Args&&... args) { |
1670 static_assert(sizeof...(Args), "grow() must be called instead"); | |
1671 static_assert(sizeof...(Args) != 1, "append() must be called instead"); | |
1672 | |
1673 DCHECK(Allocator::isAllocationAllowed()); | 1674 DCHECK(Allocator::isAllocationAllowed()); |
1674 if (UNLIKELY(size() == capacity())) | 1675 if (UNLIKELY(size() == capacity())) |
1675 expandCapacity(size() + 1); | 1676 expandCapacity(size() + 1); |
1676 | 1677 |
1677 ANNOTATE_CHANGE_SIZE(begin(), capacity(), m_size, m_size + 1); | 1678 ANNOTATE_CHANGE_SIZE(begin(), capacity(), m_size, m_size + 1); |
1678 T* t = new (NotNull, end()) T(std::forward<Args>(args)...); | 1679 T* t = new (NotNull, end()) T(std::forward<Args>(args)...); |
1679 ++m_size; | 1680 ++m_size; |
1680 return *t; | 1681 return *t; |
1681 } | 1682 } |
1682 | 1683 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1900 visitor, *const_cast<T*>(bufferEntry)); | 1901 visitor, *const_cast<T*>(bufferEntry)); |
1901 checkUnusedSlots(buffer() + size(), buffer() + capacity()); | 1902 checkUnusedSlots(buffer() + size(), buffer() + capacity()); |
1902 } | 1903 } |
1903 } | 1904 } |
1904 | 1905 |
1905 } // namespace WTF | 1906 } // namespace WTF |
1906 | 1907 |
1907 using WTF::Vector; | 1908 using WTF::Vector; |
1908 | 1909 |
1909 #endif // WTF_Vector_h | 1910 #endif // WTF_Vector_h |
OLD | NEW |