| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 reverse_iterator rend() { return reverse_iterator(begin()); } | 72 reverse_iterator rend() { return reverse_iterator(begin()); } |
| 73 const_reverse_iterator rbegin() const { return const_reverse_iterator(en
d()); } | 73 const_reverse_iterator rbegin() const { return const_reverse_iterator(en
d()); } |
| 74 const_reverse_iterator rend() const { return const_reverse_iterator(begi
n()); } | 74 const_reverse_iterator rend() const { return const_reverse_iterator(begi
n()); } |
| 75 | 75 |
| 76 T& first() { ASSERT(m_start != m_end); return m_buffer.buffer()[m_start]
; } | 76 T& first() { ASSERT(m_start != m_end); return m_buffer.buffer()[m_start]
; } |
| 77 const T& first() const { ASSERT(m_start != m_end); return m_buffer.buffe
r()[m_start]; } | 77 const T& first() const { ASSERT(m_start != m_end); return m_buffer.buffe
r()[m_start]; } |
| 78 PassType takeFirst(); | 78 PassType takeFirst(); |
| 79 | 79 |
| 80 T& last() { ASSERT(m_start != m_end); return *(--end()); } | 80 T& last() { ASSERT(m_start != m_end); return *(--end()); } |
| 81 const T& last() const { ASSERT(m_start != m_end); return *(--end()); } | 81 const T& last() const { ASSERT(m_start != m_end); return *(--end()); } |
| 82 PassType takeLast(); |
| 82 | 83 |
| 83 template<typename U> void append(const U&); | 84 template<typename U> void append(const U&); |
| 84 template<typename U> void prepend(const U&); | 85 template<typename U> void prepend(const U&); |
| 85 void removeFirst(); | 86 void removeFirst(); |
| 87 void removeLast(); |
| 86 void remove(iterator&); | 88 void remove(iterator&); |
| 87 void remove(const_iterator&); | 89 void remove(const_iterator&); |
| 88 | 90 |
| 89 void clear(); | 91 void clear(); |
| 90 | 92 |
| 91 template<typename Predicate> | 93 template<typename Predicate> |
| 92 iterator findIf(Predicate&); | 94 iterator findIf(Predicate&); |
| 93 | 95 |
| 94 private: | 96 private: |
| 95 friend class DequeIteratorBase<T, inlineCapacity>; | 97 friend class DequeIteratorBase<T, inlineCapacity>; |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 } | 321 } |
| 320 | 322 |
| 321 template<typename T, size_t inlineCapacity> | 323 template<typename T, size_t inlineCapacity> |
| 322 inline typename Deque<T, inlineCapacity>::PassType Deque<T, inlineCapacity>:
:takeFirst() | 324 inline typename Deque<T, inlineCapacity>::PassType Deque<T, inlineCapacity>:
:takeFirst() |
| 323 { | 325 { |
| 324 T oldFirst = Pass::transfer(first()); | 326 T oldFirst = Pass::transfer(first()); |
| 325 removeFirst(); | 327 removeFirst(); |
| 326 return Pass::transfer(oldFirst); | 328 return Pass::transfer(oldFirst); |
| 327 } | 329 } |
| 328 | 330 |
| 331 template<typename T, size_t inlineCapacity> |
| 332 inline typename Deque<T, inlineCapacity>::PassType Deque<T, inlineCapacity>:
:takeLast() |
| 333 { |
| 334 T oldLast = Pass::transfer(last()); |
| 335 removeLast(); |
| 336 return Pass::transfer(oldLast); |
| 337 } |
| 338 |
| 329 template<typename T, size_t inlineCapacity> template<typename U> | 339 template<typename T, size_t inlineCapacity> template<typename U> |
| 330 inline void Deque<T, inlineCapacity>::append(const U& value) | 340 inline void Deque<T, inlineCapacity>::append(const U& value) |
| 331 { | 341 { |
| 332 expandCapacityIfNeeded(); | 342 expandCapacityIfNeeded(); |
| 333 new (NotNull, &m_buffer.buffer()[m_end]) T(value); | 343 new (NotNull, &m_buffer.buffer()[m_end]) T(value); |
| 334 if (m_end == m_buffer.capacity() - 1) | 344 if (m_end == m_buffer.capacity() - 1) |
| 335 m_end = 0; | 345 m_end = 0; |
| 336 else | 346 else |
| 337 ++m_end; | 347 ++m_end; |
| 338 } | 348 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 353 { | 363 { |
| 354 ASSERT(!isEmpty()); | 364 ASSERT(!isEmpty()); |
| 355 TypeOperations::destruct(&m_buffer.buffer()[m_start], &m_buffer.buffer()
[m_start + 1]); | 365 TypeOperations::destruct(&m_buffer.buffer()[m_start], &m_buffer.buffer()
[m_start + 1]); |
| 356 if (m_start == m_buffer.capacity() - 1) | 366 if (m_start == m_buffer.capacity() - 1) |
| 357 m_start = 0; | 367 m_start = 0; |
| 358 else | 368 else |
| 359 ++m_start; | 369 ++m_start; |
| 360 } | 370 } |
| 361 | 371 |
| 362 template<typename T, size_t inlineCapacity> | 372 template<typename T, size_t inlineCapacity> |
| 373 inline void Deque<T, inlineCapacity>::removeLast() |
| 374 { |
| 375 ASSERT(!isEmpty()); |
| 376 if (!m_end) |
| 377 m_end = m_buffer.capacity() - 1; |
| 378 else |
| 379 --m_end; |
| 380 TypeOperations::destruct(&m_buffer.buffer()[m_end], &m_buffer.buffer()[m
_end + 1]); |
| 381 } |
| 382 |
| 383 template<typename T, size_t inlineCapacity> |
| 363 inline void Deque<T, inlineCapacity>::remove(iterator& it) | 384 inline void Deque<T, inlineCapacity>::remove(iterator& it) |
| 364 { | 385 { |
| 365 remove(it.m_index); | 386 remove(it.m_index); |
| 366 } | 387 } |
| 367 | 388 |
| 368 template<typename T, size_t inlineCapacity> | 389 template<typename T, size_t inlineCapacity> |
| 369 inline void Deque<T, inlineCapacity>::remove(const_iterator& it) | 390 inline void Deque<T, inlineCapacity>::remove(const_iterator& it) |
| 370 { | 391 { |
| 371 remove(it.m_index); | 392 remove(it.m_index); |
| 372 } | 393 } |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 if (!m_index) | 486 if (!m_index) |
| 466 return &m_deque->m_buffer.buffer()[m_deque->m_buffer.capacity() - 1]
; | 487 return &m_deque->m_buffer.buffer()[m_deque->m_buffer.capacity() - 1]
; |
| 467 return &m_deque->m_buffer.buffer()[m_index - 1]; | 488 return &m_deque->m_buffer.buffer()[m_index - 1]; |
| 468 } | 489 } |
| 469 | 490 |
| 470 } // namespace WTF | 491 } // namespace WTF |
| 471 | 492 |
| 472 using WTF::Deque; | 493 using WTF::Deque; |
| 473 | 494 |
| 474 #endif // WTF_Deque_h | 495 #endif // WTF_Deque_h |
| OLD | NEW |