Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef EphemeralRange_h | 5 #ifndef EphemeralRange_h |
| 6 #define EphemeralRange_h | 6 #define EphemeralRange_h |
| 7 | 7 |
| 8 #include "core/editing/Position.h" | 8 #include "core/editing/Position.h" |
| 9 | 9 |
| 10 namespace blink { | 10 namespace blink { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 extern template class CORE_EXTERN_TEMPLATE_EXPORT EphemeralRangeTemplate<Editing Strategy>; | 88 extern template class CORE_EXTERN_TEMPLATE_EXPORT EphemeralRangeTemplate<Editing Strategy>; |
| 89 using EphemeralRange = EphemeralRangeTemplate<EditingStrategy>; | 89 using EphemeralRange = EphemeralRangeTemplate<EditingStrategy>; |
| 90 | 90 |
| 91 extern template class CORE_EXTERN_TEMPLATE_EXPORT EphemeralRangeTemplate<Editing InFlatTreeStrategy>; | 91 extern template class CORE_EXTERN_TEMPLATE_EXPORT EphemeralRangeTemplate<Editing InFlatTreeStrategy>; |
| 92 using EphemeralRangeInFlatTree = EphemeralRangeTemplate<EditingInFlatTreeStrateg y>; | 92 using EphemeralRangeInFlatTree = EphemeralRangeTemplate<EditingInFlatTreeStrateg y>; |
| 93 | 93 |
| 94 // Returns a newly created |Range| object from |range| or |nullptr| if | 94 // Returns a newly created |Range| object from |range| or |nullptr| if |
| 95 // |range.isNull()| returns true. | 95 // |range.isNull()| returns true. |
| 96 CORE_EXPORT Range* createRange(const EphemeralRange& /* range */); | 96 CORE_EXPORT Range* createRange(const EphemeralRange& /* range */); |
| 97 | 97 |
| 98 namespace internal { | |
|
tkent
2016/08/17 02:05:02
We shouldn't add |internal| namespace. These temp
Andrey Kraynov
2016/08/17 09:58:16
Done.
| |
| 99 | |
| 100 // We should restrict access to the unwanted version of |TraversalRange::end()| function. | |
| 101 template <class Iterator> | |
| 102 class TraversalRangeImpl : private TraversalRange<Iterator> { | |
| 103 STACK_ALLOCATED(); | |
| 104 public: | |
| 105 using StartNodeType = typename TraversalRange<Iterator>::StartNodeType; | |
| 106 TraversalRangeImpl(const StartNodeType* start, const StartNodeType* pastEndN ode) | |
| 107 : TraversalRange<Iterator>(start), m_pastEndNode(pastEndNode) { } | |
| 108 | |
| 109 using TraversalRange<Iterator>::begin; | |
| 110 | |
| 111 Iterator end() { return Iterator(m_pastEndNode); } | |
| 112 | |
| 113 private: | |
| 114 Member<const StartNodeType> m_pastEndNode; | |
| 115 }; | |
| 116 | |
| 117 template <class TraversalNext> | |
| 118 class CheckedTraversalNextIterator : public TraversalNextIterator<TraversalNext> { | |
| 119 STACK_ALLOCATED(); | |
| 120 public: | |
| 121 using StartNodeType = typename TraversalNextIterator<TraversalNext>::StartNo deType; | |
| 122 explicit CheckedTraversalNextIterator(const StartNodeType* start) : Traversa lNextIterator<TraversalNext>(start) { } | |
| 123 | |
| 124 bool isNull() const { return !TraversalNextIterator<TraversalNext>::m_curren t; } | |
| 125 void setCurrent(Node* current) { TraversalNextIterator<TraversalNext>::m_cur rent = current; } | |
| 126 }; | |
| 127 | |
| 128 using RangeTraversal = TraversalRangeImpl<CheckedTraversalNextIterator<NodeTrave rsal>>; | |
|
tkent
2016/08/17 02:05:02
We shouldn't put them in |internal| namespace. Th
Andrey Kraynov
2016/08/17 09:58:16
Done.
| |
| 129 using RangeTraversalInFlatTree = TraversalRangeImpl<CheckedTraversalNextIterator <FlatTreeTraversal>>; | |
| 130 | |
| 131 } // namespace internal | |
| 132 | |
| 133 internal::RangeTraversal inRange(const Position& start, const Position& end); | |
| 134 internal::RangeTraversalInFlatTree inRange(const PositionInFlatTree& start, cons t PositionInFlatTree& end); | |
| 135 | |
| 136 internal::RangeTraversal inRange(const EphemeralRange&); | |
| 137 internal::RangeTraversalInFlatTree inRange(const EphemeralRangeInFlatTree&); | |
| 138 | |
| 98 } // namespace blink | 139 } // namespace blink |
| 99 | 140 |
| 100 #endif | 141 #endif |
| OLD | NEW |