| 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 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 { | 352 { |
| 353 deallocateBuffer(m_buffer); | 353 deallocateBuffer(m_buffer); |
| 354 m_buffer = 0; | 354 m_buffer = 0; |
| 355 } | 355 } |
| 356 | 356 |
| 357 void deallocateBuffer(T* bufferToDeallocate) | 357 void deallocateBuffer(T* bufferToDeallocate) |
| 358 { | 358 { |
| 359 Allocator::backingFree(bufferToDeallocate); | 359 Allocator::backingFree(bufferToDeallocate); |
| 360 } | 360 } |
| 361 | 361 |
| 362 bool expandBuffer(size_t newCapacity) |
| 363 { |
| 364 size_t sizeToAllocate = allocationSize(newCapacity); |
| 365 if (Allocator::backingExpand(m_buffer, sizeToAllocate)) { |
| 366 m_capacity = sizeToAllocate / sizeof(T); |
| 367 return true; |
| 368 } |
| 369 return false; |
| 370 } |
| 371 |
| 362 void resetBufferPointer() | 372 void resetBufferPointer() |
| 363 { | 373 { |
| 364 m_buffer = 0; | 374 m_buffer = 0; |
| 365 m_capacity = 0; | 375 m_capacity = 0; |
| 366 } | 376 } |
| 367 | 377 |
| 368 void swapVectorBuffer(VectorBuffer<T, 0, Allocator>& other) | 378 void swapVectorBuffer(VectorBuffer<T, 0, Allocator>& other) |
| 369 { | 379 { |
| 370 std::swap(m_buffer, other.m_buffer); | 380 std::swap(m_buffer, other.m_buffer); |
| 371 std::swap(m_capacity, other.m_capacity); | 381 std::swap(m_capacity, other.m_capacity); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 { | 431 { |
| 422 Allocator::backingFree(bufferToDeallocate); | 432 Allocator::backingFree(bufferToDeallocate); |
| 423 } | 433 } |
| 424 | 434 |
| 425 void deallocateBuffer(T* bufferToDeallocate) | 435 void deallocateBuffer(T* bufferToDeallocate) |
| 426 { | 436 { |
| 427 if (UNLIKELY(bufferToDeallocate != inlineBuffer())) | 437 if (UNLIKELY(bufferToDeallocate != inlineBuffer())) |
| 428 reallyDeallocateBuffer(bufferToDeallocate); | 438 reallyDeallocateBuffer(bufferToDeallocate); |
| 429 } | 439 } |
| 430 | 440 |
| 441 bool expandBuffer(size_t newCapacity) |
| 442 { |
| 443 ASSERT(newCapacity > inlineCapacity); |
| 444 if (m_buffer == inlineBuffer()) |
| 445 return false; |
| 446 |
| 447 size_t sizeToAllocate = allocationSize(newCapacity); |
| 448 if (Allocator::backingExpand(m_buffer, sizeToAllocate)) { |
| 449 m_capacity = sizeToAllocate / sizeof(T); |
| 450 return true; |
| 451 } |
| 452 return false; |
| 453 } |
| 454 |
| 431 void resetBufferPointer() | 455 void resetBufferPointer() |
| 432 { | 456 { |
| 433 m_buffer = inlineBuffer(); | 457 m_buffer = inlineBuffer(); |
| 434 m_capacity = inlineCapacity; | 458 m_capacity = inlineCapacity; |
| 435 } | 459 } |
| 436 | 460 |
| 437 void allocateBuffer(size_t newCapacity) | 461 void allocateBuffer(size_t newCapacity) |
| 438 { | 462 { |
| 439 // FIXME: This should ASSERT(!m_buffer) to catch misuse/leaks. | 463 // FIXME: This should ASSERT(!m_buffer) to catch misuse/leaks. |
| 440 if (newCapacity > inlineCapacity) | 464 if (newCapacity > inlineCapacity) |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 m_size = size; | 966 m_size = size; |
| 943 } | 967 } |
| 944 | 968 |
| 945 template<typename T, size_t inlineCapacity, typename Allocator> | 969 template<typename T, size_t inlineCapacity, typename Allocator> |
| 946 void Vector<T, inlineCapacity, Allocator>::reserveCapacity(size_t newCapacit
y) | 970 void Vector<T, inlineCapacity, Allocator>::reserveCapacity(size_t newCapacit
y) |
| 947 { | 971 { |
| 948 if (UNLIKELY(newCapacity <= capacity())) | 972 if (UNLIKELY(newCapacity <= capacity())) |
| 949 return; | 973 return; |
| 950 T* oldBuffer = begin(); | 974 T* oldBuffer = begin(); |
| 951 T* oldEnd = end(); | 975 T* oldEnd = end(); |
| 976 if (Base::expandBuffer(newCapacity)) |
| 977 return; |
| 952 Base::allocateBuffer(newCapacity); | 978 Base::allocateBuffer(newCapacity); |
| 953 TypeOperations::move(oldBuffer, oldEnd, begin()); | 979 TypeOperations::move(oldBuffer, oldEnd, begin()); |
| 954 Base::deallocateBuffer(oldBuffer); | 980 Base::deallocateBuffer(oldBuffer); |
| 955 } | 981 } |
| 956 | 982 |
| 957 template<typename T, size_t inlineCapacity, typename Allocator> | 983 template<typename T, size_t inlineCapacity, typename Allocator> |
| 958 inline void Vector<T, inlineCapacity, Allocator>::reserveInitialCapacity(siz
e_t initialCapacity) | 984 inline void Vector<T, inlineCapacity, Allocator>::reserveInitialCapacity(siz
e_t initialCapacity) |
| 959 { | 985 { |
| 960 ASSERT(!m_size); | 986 ASSERT(!m_size); |
| 961 ASSERT(capacity() == inlineCapacity); | 987 ASSERT(capacity() == inlineCapacity); |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1191 struct NeedsTracing<Vector<T, N> > { | 1217 struct NeedsTracing<Vector<T, N> > { |
| 1192 static const bool value = false; | 1218 static const bool value = false; |
| 1193 }; | 1219 }; |
| 1194 #endif | 1220 #endif |
| 1195 | 1221 |
| 1196 } // namespace WTF | 1222 } // namespace WTF |
| 1197 | 1223 |
| 1198 using WTF::Vector; | 1224 using WTF::Vector; |
| 1199 | 1225 |
| 1200 #endif // WTF_Vector_h | 1226 #endif // WTF_Vector_h |
| OLD | NEW |