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 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 template<typename Iterator> void appendRange(Iterator start, Iterator en
d); | 738 template<typename Iterator> void appendRange(Iterator start, Iterator en
d); |
739 | 739 |
740 void swap(Vector& other) | 740 void swap(Vector& other) |
741 { | 741 { |
742 Base::swapVectorBuffer(other); | 742 Base::swapVectorBuffer(other); |
743 std::swap(m_size, other.m_size); | 743 std::swap(m_size, other.m_size); |
744 } | 744 } |
745 | 745 |
746 void reverse(); | 746 void reverse(); |
747 | 747 |
748 void trace(typename Allocator::Visitor*); | 748 template<typename VisitorDispatcher> void trace(VisitorDispatcher visito
r); |
749 | 749 |
750 private: | 750 private: |
751 void expandCapacity(size_t newMinCapacity); | 751 void expandCapacity(size_t newMinCapacity); |
752 const T* expandCapacity(size_t newMinCapacity, const T*); | 752 const T* expandCapacity(size_t newMinCapacity, const T*); |
753 template<typename U> U* expandCapacity(size_t newMinCapacity, U*); | 753 template<typename U> U* expandCapacity(size_t newMinCapacity, U*); |
754 void shrinkCapacity(size_t newCapacity); | 754 void shrinkCapacity(size_t newCapacity); |
755 template<typename U> void appendSlowCase(const U&); | 755 template<typename U> void appendSlowCase(const U&); |
756 | 756 |
757 using Base::m_size; | 757 using Base::m_size; |
758 using Base::buffer; | 758 using Base::buffer; |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1203 | 1203 |
1204 template<typename T, size_t inlineCapacityA, size_t inlineCapacityB, typenam
e Allocator> | 1204 template<typename T, size_t inlineCapacityA, size_t inlineCapacityB, typenam
e Allocator> |
1205 inline bool operator!=(const Vector<T, inlineCapacityA, Allocator>& a, const
Vector<T, inlineCapacityB, Allocator>& b) | 1205 inline bool operator!=(const Vector<T, inlineCapacityA, Allocator>& a, const
Vector<T, inlineCapacityB, Allocator>& b) |
1206 { | 1206 { |
1207 return !(a == b); | 1207 return !(a == b); |
1208 } | 1208 } |
1209 | 1209 |
1210 // This is only called if the allocator is a HeapAllocator. It is used when | 1210 // This is only called if the allocator is a HeapAllocator. It is used when |
1211 // visiting during a tracing GC. | 1211 // visiting during a tracing GC. |
1212 template<typename T, size_t inlineCapacity, typename Allocator> | 1212 template<typename T, size_t inlineCapacity, typename Allocator> |
1213 void Vector<T, inlineCapacity, Allocator>::trace(typename Allocator::Visitor
* visitor) | 1213 template<typename VisitorDispatcher> |
| 1214 void Vector<T, inlineCapacity, Allocator>::trace(VisitorDispatcher visitor) |
1214 { | 1215 { |
1215 ASSERT(Allocator::isGarbageCollected); // Garbage collector must be enab
led. | 1216 COMPILE_ASSERT(Allocator::isGarbageCollected, GarbageCollectorMustBeEnab
led); |
1216 const T* bufferBegin = buffer(); | 1217 const T* bufferBegin = buffer(); |
1217 const T* bufferEnd = buffer() + size(); | 1218 const T* bufferEnd = buffer() + size(); |
1218 if (ShouldBeTraced<VectorTraits<T> >::value) { | 1219 if (ShouldBeTraced<VectorTraits<T> >::value) { |
1219 for (const T* bufferEntry = bufferBegin; bufferEntry != bufferEnd; b
ufferEntry++) | 1220 for (const T* bufferEntry = bufferBegin; bufferEntry != bufferEnd; b
ufferEntry++) |
1220 Allocator::template trace<T, VectorTraits<T> >(visitor, *const_c
ast<T*>(bufferEntry)); | 1221 Allocator::template trace<T, VectorTraits<T> >(visitor, *const_c
ast<T*>(bufferEntry)); |
1221 } | 1222 } |
1222 if (this->hasOutOfLineBuffer()) | 1223 if (this->hasOutOfLineBuffer()) |
1223 Allocator::markNoTracing(visitor, buffer()); | 1224 visitor->markNoTracing(buffer()); |
1224 } | 1225 } |
1225 | 1226 |
1226 #if !ENABLE(OILPAN) | 1227 #if !ENABLE(OILPAN) |
1227 template<typename T, size_t N> | 1228 template<typename T, size_t N> |
1228 struct NeedsTracing<Vector<T, N> > { | 1229 struct NeedsTracing<Vector<T, N> > { |
1229 static const bool value = false; | 1230 static const bool value = false; |
1230 }; | 1231 }; |
1231 #endif | 1232 #endif |
1232 | 1233 |
1233 } // namespace WTF | 1234 } // namespace WTF |
1234 | 1235 |
1235 using WTF::Vector; | 1236 using WTF::Vector; |
1236 | 1237 |
1237 #endif // WTF_Vector_h | 1238 #endif // WTF_Vector_h |
OLD | NEW |