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

Side by Side Diff: third_party/WebKit/Source/wtf/Deque.h

Issue 2065443002: Rename and improve "traceable" templates. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment rewording Created 4 years, 6 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
OLDNEW
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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 void remove(const_iterator&); 106 void remove(const_iterator&);
107 107
108 void clear(); 108 void clear();
109 109
110 template <typename Predicate> 110 template <typename Predicate>
111 iterator findIf(Predicate&); 111 iterator findIf(Predicate&);
112 112
113 template <typename VisitorDispatcher> void trace(VisitorDispatcher); 113 template <typename VisitorDispatcher> void trace(VisitorDispatcher);
114 114
115 static_assert(!std::is_polymorphic<T>::value || !VectorTraits<T>::canInitial izeWithMemset, "Cannot initialize with memset if there is a vtable"); 115 static_assert(!std::is_polymorphic<T>::value || !VectorTraits<T>::canInitial izeWithMemset, "Cannot initialize with memset if there is a vtable");
116 static_assert(Allocator::isGarbageCollected || !AllowsOnlyPlacementNew<T>::v alue || !NeedsTracing<T>::value, "Cannot put DISALLOW_NEW_EXCEPT_PLACEMENT_NEW o bjects that have trace methods into an off-heap Deque"); 116 static_assert(Allocator::isGarbageCollected || !AllowsOnlyPlacementNew<T>::v alue || !IsTraceable<T>::value, "Cannot put DISALLOW_NEW_EXCEPT_PLACEMENT_NEW ob jects that have trace methods into an off-heap Deque");
117 static_assert(Allocator::isGarbageCollected || !IsPointerToGarbageCollectedT ype<T>::value, "Cannot put raw pointers to garbage-collected classes into a Dequ e. Use HeapDeque<Member<T>> instead."); 117 static_assert(Allocator::isGarbageCollected || !IsPointerToGarbageCollectedT ype<T>::value, "Cannot put raw pointers to garbage-collected classes into a Dequ e. Use HeapDeque<Member<T>> instead.");
118 118
119 private: 119 private:
120 friend class DequeIteratorBase<T, inlineCapacity, Allocator>; 120 friend class DequeIteratorBase<T, inlineCapacity, Allocator>;
121 121
122 class BackingBuffer : public VectorBuffer<T, INLINE_CAPACITY, Allocator> { 122 class BackingBuffer : public VectorBuffer<T, INLINE_CAPACITY, Allocator> {
123 WTF_MAKE_NONCOPYABLE(BackingBuffer); 123 WTF_MAKE_NONCOPYABLE(BackingBuffer);
124 private: 124 private:
125 using Base = VectorBuffer<T, INLINE_CAPACITY, Allocator>; 125 using Base = VectorBuffer<T, INLINE_CAPACITY, Allocator>;
126 using Base::m_size; 126 using Base::m_size;
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 589
590 // This is only called if the allocator is a HeapAllocator. It is used when 590 // This is only called if the allocator is a HeapAllocator. It is used when
591 // visiting during a tracing GC. 591 // visiting during a tracing GC.
592 template <typename T, size_t inlineCapacity, typename Allocator> 592 template <typename T, size_t inlineCapacity, typename Allocator>
593 template <typename VisitorDispatcher> 593 template <typename VisitorDispatcher>
594 void Deque<T, inlineCapacity, Allocator>::trace(VisitorDispatcher visitor) 594 void Deque<T, inlineCapacity, Allocator>::trace(VisitorDispatcher visitor)
595 { 595 {
596 ASSERT(Allocator::isGarbageCollected); // Garbage collector must be enabled. 596 ASSERT(Allocator::isGarbageCollected); // Garbage collector must be enabled.
597 const T* bufferBegin = m_buffer.buffer(); 597 const T* bufferBegin = m_buffer.buffer();
598 const T* end = bufferBegin + m_end; 598 const T* end = bufferBegin + m_end;
599 if (NeedsTracingTrait<VectorTraits<T>>::value) { 599 if (IsTraceableInCollectionTrait<VectorTraits<T>>::value) {
600 if (m_start <= m_end) { 600 if (m_start <= m_end) {
601 for (const T* bufferEntry = bufferBegin + m_start; bufferEntry != en d; bufferEntry++) 601 for (const T* bufferEntry = bufferBegin + m_start; bufferEntry != en d; bufferEntry++)
602 Allocator::template trace<VisitorDispatcher, T, VectorTraits<T>> (visitor, *const_cast<T*>(bufferEntry)); 602 Allocator::template trace<VisitorDispatcher, T, VectorTraits<T>> (visitor, *const_cast<T*>(bufferEntry));
603 } else { 603 } else {
604 for (const T* bufferEntry = bufferBegin; bufferEntry != end; bufferE ntry++) 604 for (const T* bufferEntry = bufferBegin; bufferEntry != end; bufferE ntry++)
605 Allocator::template trace<VisitorDispatcher, T, VectorTraits<T>> (visitor, *const_cast<T*>(bufferEntry)); 605 Allocator::template trace<VisitorDispatcher, T, VectorTraits<T>> (visitor, *const_cast<T*>(bufferEntry));
606 const T* bufferEnd = m_buffer.buffer() + m_buffer.capacity(); 606 const T* bufferEnd = m_buffer.buffer() + m_buffer.capacity();
607 for (const T* bufferEntry = bufferBegin + m_start; bufferEntry != bu fferEnd; bufferEntry++) 607 for (const T* bufferEntry = bufferBegin + m_start; bufferEntry != bu fferEnd; bufferEntry++)
608 Allocator::template trace<VisitorDispatcher, T, VectorTraits<T>> (visitor, *const_cast<T*>(bufferEntry)); 608 Allocator::template trace<VisitorDispatcher, T, VectorTraits<T>> (visitor, *const_cast<T*>(bufferEntry));
609 } 609 }
610 } 610 }
611 if (m_buffer.hasOutOfLineBuffer()) 611 if (m_buffer.hasOutOfLineBuffer())
612 Allocator::markNoTracing(visitor, m_buffer.buffer()); 612 Allocator::markNoTracing(visitor, m_buffer.buffer());
613 } 613 }
614 614
615 template <typename T, size_t inlineCapacity, typename Allocator> 615 template <typename T, size_t inlineCapacity, typename Allocator>
616 inline void swap(Deque<T, inlineCapacity, Allocator>& a, Deque<T, inlineCapacity , Allocator>& b) 616 inline void swap(Deque<T, inlineCapacity, Allocator>& a, Deque<T, inlineCapacity , Allocator>& b)
617 { 617 {
618 a.swap(b); 618 a.swap(b);
619 } 619 }
620 620
621 } // namespace WTF 621 } // namespace WTF
622 622
623 using WTF::Deque; 623 using WTF::Deque;
624 624
625 #endif // WTF_Deque_h 625 #endif // WTF_Deque_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698