Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1133)

Side by Side Diff: Source/wtf/Vector.h

Issue 456633002: Oilpan: Assert that updator functions of HashMap, HashSet, and Vector should not be used during wea… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/wtf/HashTable.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 994 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 Base::deallocateBuffer(oldBuffer); 1005 Base::deallocateBuffer(oldBuffer);
1006 } 1006 }
1007 1007
1008 // Templatizing these is better than just letting the conversion happen impl icitly, 1008 // Templatizing these is better than just letting the conversion happen impl icitly,
1009 // because for instance it allows a PassRefPtr to be appended to a RefPtr ve ctor 1009 // because for instance it allows a PassRefPtr to be appended to a RefPtr ve ctor
1010 // without refcount thrash. 1010 // without refcount thrash.
1011 1011
1012 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U> 1012 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U>
1013 void Vector<T, inlineCapacity, Allocator>::append(const U* data, size_t data Size) 1013 void Vector<T, inlineCapacity, Allocator>::append(const U* data, size_t data Size)
1014 { 1014 {
1015 ASSERT(Allocator::isAllocationAllowed());
1015 size_t newSize = m_size + dataSize; 1016 size_t newSize = m_size + dataSize;
1016 if (newSize > capacity()) { 1017 if (newSize > capacity()) {
1017 data = expandCapacity(newSize, data); 1018 data = expandCapacity(newSize, data);
1018 ASSERT(begin()); 1019 ASSERT(begin());
1019 } 1020 }
1020 RELEASE_ASSERT(newSize >= m_size); 1021 RELEASE_ASSERT(newSize >= m_size);
1021 T* dest = end(); 1022 T* dest = end();
1022 VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(d ata, &data[dataSize], dest); 1023 VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(d ata, &data[dataSize], dest);
1023 m_size = newSize; 1024 m_size = newSize;
1024 } 1025 }
1025 1026
1026 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U> 1027 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U>
1027 ALWAYS_INLINE void Vector<T, inlineCapacity, Allocator>::append(const U& val ) 1028 ALWAYS_INLINE void Vector<T, inlineCapacity, Allocator>::append(const U& val )
1028 { 1029 {
1030 ASSERT(Allocator::isAllocationAllowed());
1029 if (LIKELY(size() != capacity())) { 1031 if (LIKELY(size() != capacity())) {
1030 new (NotNull, end()) T(val); 1032 new (NotNull, end()) T(val);
1031 ++m_size; 1033 ++m_size;
1032 return; 1034 return;
1033 } 1035 }
1034 1036
1035 appendSlowCase(val); 1037 appendSlowCase(val);
1036 } 1038 }
1037 1039
1038 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U> 1040 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U>
(...skipping 23 matching lines...) Expand all
1062 1064
1063 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U, size_t otherCapacity, typename OtherAllocator> 1065 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U, size_t otherCapacity, typename OtherAllocator>
1064 inline void Vector<T, inlineCapacity, Allocator>::appendVector(const Vector< U, otherCapacity, OtherAllocator>& val) 1066 inline void Vector<T, inlineCapacity, Allocator>::appendVector(const Vector< U, otherCapacity, OtherAllocator>& val)
1065 { 1067 {
1066 append(val.begin(), val.size()); 1068 append(val.begin(), val.size());
1067 } 1069 }
1068 1070
1069 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U> 1071 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U>
1070 void Vector<T, inlineCapacity, Allocator>::insert(size_t position, const U* data, size_t dataSize) 1072 void Vector<T, inlineCapacity, Allocator>::insert(size_t position, const U* data, size_t dataSize)
1071 { 1073 {
1074 ASSERT(Allocator::isAllocationAllowed());
1072 RELEASE_ASSERT(position <= size()); 1075 RELEASE_ASSERT(position <= size());
1073 size_t newSize = m_size + dataSize; 1076 size_t newSize = m_size + dataSize;
1074 if (newSize > capacity()) { 1077 if (newSize > capacity()) {
1075 data = expandCapacity(newSize, data); 1078 data = expandCapacity(newSize, data);
1076 ASSERT(begin()); 1079 ASSERT(begin());
1077 } 1080 }
1078 RELEASE_ASSERT(newSize >= m_size); 1081 RELEASE_ASSERT(newSize >= m_size);
1079 T* spot = begin() + position; 1082 T* spot = begin() + position;
1080 TypeOperations::moveOverlapping(spot, end(), spot + dataSize); 1083 TypeOperations::moveOverlapping(spot, end(), spot + dataSize);
1081 VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(d ata, &data[dataSize], spot); 1084 VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(d ata, &data[dataSize], spot);
1082 m_size = newSize; 1085 m_size = newSize;
1083 } 1086 }
1084 1087
1085 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U> 1088 template<typename T, size_t inlineCapacity, typename Allocator> template<typ ename U>
1086 inline void Vector<T, inlineCapacity, Allocator>::insert(size_t position, co nst U& val) 1089 inline void Vector<T, inlineCapacity, Allocator>::insert(size_t position, co nst U& val)
1087 { 1090 {
1091 ASSERT(Allocator::isAllocationAllowed());
1088 RELEASE_ASSERT(position <= size()); 1092 RELEASE_ASSERT(position <= size());
1089 const U* data = &val; 1093 const U* data = &val;
1090 if (size() == capacity()) { 1094 if (size() == capacity()) {
1091 data = expandCapacity(size() + 1, data); 1095 data = expandCapacity(size() + 1, data);
1092 ASSERT(begin()); 1096 ASSERT(begin());
1093 } 1097 }
1094 T* spot = begin() + position; 1098 T* spot = begin() + position;
1095 TypeOperations::moveOverlapping(spot, end(), spot + 1); 1099 TypeOperations::moveOverlapping(spot, end(), spot + 1);
1096 new (NotNull, spot) T(*data); 1100 new (NotNull, spot) T(*data);
1097 ++m_size; 1101 ++m_size;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 struct NeedsTracing<Vector<T, N> > { 1207 struct NeedsTracing<Vector<T, N> > {
1204 static const bool value = false; 1208 static const bool value = false;
1205 }; 1209 };
1206 #endif 1210 #endif
1207 1211
1208 } // namespace WTF 1212 } // namespace WTF
1209 1213
1210 using WTF::Vector; 1214 using WTF::Vector;
1211 1215
1212 #endif // WTF_Vector_h 1216 #endif // WTF_Vector_h
OLDNEW
« no previous file with comments | « Source/wtf/HashTable.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698