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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 DCHECK_NE(start_, end_); | 102 DCHECK_NE(start_, end_); |
103 return *(--end()); | 103 return *(--end()); |
104 } | 104 } |
105 const T& back() const { | 105 const T& back() const { |
106 DCHECK_NE(start_, end_); | 106 DCHECK_NE(start_, end_); |
107 return *(--end()); | 107 return *(--end()); |
108 } | 108 } |
109 T TakeLast(); | 109 T TakeLast(); |
110 | 110 |
111 T& at(size_t i) { | 111 T& at(size_t i) { |
112 RELEASE_ASSERT(i < size()); | 112 CHECK_LT(i, size()); |
113 size_t right = buffer_.capacity() - start_; | 113 size_t right = buffer_.capacity() - start_; |
114 return i < right ? buffer_.Buffer()[start_ + i] | 114 return i < right ? buffer_.Buffer()[start_ + i] |
115 : buffer_.Buffer()[i - right]; | 115 : buffer_.Buffer()[i - right]; |
116 } | 116 } |
117 const T& at(size_t i) const { | 117 const T& at(size_t i) const { |
118 RELEASE_ASSERT(i < size()); | 118 CHECK_LT(i, size()); |
119 size_t right = buffer_.capacity() - start_; | 119 size_t right = buffer_.capacity() - start_; |
120 return i < right ? buffer_.Buffer()[start_ + i] | 120 return i < right ? buffer_.Buffer()[start_ + i] |
121 : buffer_.Buffer()[i - right]; | 121 : buffer_.Buffer()[i - right]; |
122 } | 122 } |
123 | 123 |
124 T& operator[](size_t i) { return at(i); } | 124 T& operator[](size_t i) { return at(i); } |
125 const T& operator[](size_t i) const { return at(i); } | 125 const T& operator[](size_t i) const { return at(i); } |
126 | 126 |
127 template <typename U> | 127 template <typename U> |
128 void push_front(U&&); | 128 void push_front(U&&); |
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 DCHECK_NE(index_, deque_->start_); | 640 DCHECK_NE(index_, deque_->start_); |
641 DCHECK(deque_->buffer_.capacity()); | 641 DCHECK(deque_->buffer_.capacity()); |
642 if (!index_) | 642 if (!index_) |
643 index_ = deque_->buffer_.capacity() - 1; | 643 index_ = deque_->buffer_.capacity() - 1; |
644 else | 644 else |
645 --index_; | 645 --index_; |
646 } | 646 } |
647 | 647 |
648 template <typename T, size_t inlineCapacity, typename Allocator> | 648 template <typename T, size_t inlineCapacity, typename Allocator> |
649 inline T* DequeIteratorBase<T, inlineCapacity, Allocator>::After() const { | 649 inline T* DequeIteratorBase<T, inlineCapacity, Allocator>::After() const { |
650 RELEASE_ASSERT(index_ != deque_->end_); | 650 CHECK_NE(index_, deque_->end_); |
651 return &deque_->buffer_.Buffer()[index_]; | 651 return &deque_->buffer_.Buffer()[index_]; |
652 } | 652 } |
653 | 653 |
654 template <typename T, size_t inlineCapacity, typename Allocator> | 654 template <typename T, size_t inlineCapacity, typename Allocator> |
655 inline T* DequeIteratorBase<T, inlineCapacity, Allocator>::Before() const { | 655 inline T* DequeIteratorBase<T, inlineCapacity, Allocator>::Before() const { |
656 RELEASE_ASSERT(index_ != deque_->start_); | 656 CHECK_NE(index_, deque_->start_); |
657 if (!index_) | 657 if (!index_) |
658 return &deque_->buffer_.buffer()[deque_->buffer_.capacity() - 1]; | 658 return &deque_->buffer_.buffer()[deque_->buffer_.capacity() - 1]; |
659 return &deque_->buffer_.buffer()[index_ - 1]; | 659 return &deque_->buffer_.buffer()[index_ - 1]; |
660 } | 660 } |
661 | 661 |
662 // This is only called if the allocator is a HeapAllocator. It is used when | 662 // This is only called if the allocator is a HeapAllocator. It is used when |
663 // visiting during a tracing GC. | 663 // visiting during a tracing GC. |
664 template <typename T, size_t inlineCapacity, typename Allocator> | 664 template <typename T, size_t inlineCapacity, typename Allocator> |
665 template <typename VisitorDispatcher> | 665 template <typename VisitorDispatcher> |
666 void Deque<T, inlineCapacity, Allocator>::Trace(VisitorDispatcher visitor) { | 666 void Deque<T, inlineCapacity, Allocator>::Trace(VisitorDispatcher visitor) { |
(...skipping 29 matching lines...) Expand all Loading... |
696 inline void swap(Deque<T, inlineCapacity, Allocator>& a, | 696 inline void swap(Deque<T, inlineCapacity, Allocator>& a, |
697 Deque<T, inlineCapacity, Allocator>& b) { | 697 Deque<T, inlineCapacity, Allocator>& b) { |
698 a.Swap(b); | 698 a.Swap(b); |
699 } | 699 } |
700 | 700 |
701 } // namespace WTF | 701 } // namespace WTF |
702 | 702 |
703 using WTF::Deque; | 703 using WTF::Deque; |
704 | 704 |
705 #endif // WTF_Deque_h | 705 #endif // WTF_Deque_h |
OLD | NEW |