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 { | |
| 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 using RangeTraversal = TraversalRangeImpl<TraversalNextIterator<NodeTraversal>>; | |
| 118 using RangeTraversalInFlatTree = TraversalRangeImpl<TraversalNextIterator<FlatTr eeTraversal>>; | |
| 119 | |
| 120 } // namespace internal | |
| 121 | |
| 122 internal::RangeTraversal inRange(const Position& start, const Position& end); | |
|
Andrey Kraynov
2016/08/16 10:02:11
Should I move these functions to some static class
yosin_UTC9
2016/08/17 01:45:31
I don't think so.
How about EphmeralRange::nodes(
| |
| 123 internal::RangeTraversalInFlatTree inRange(const PositionInFlatTree& start, cons t PositionInFlatTree& end); | |
| 124 | |
| 125 internal::RangeTraversal inRange(const EphemeralRange&); | |
| 126 internal::RangeTraversalInFlatTree inRange(const EphemeralRangeInFlatTree&); | |
| 127 | |
| 98 } // namespace blink | 128 } // namespace blink |
| 99 | 129 |
| 100 #endif | 130 #endif |
| OLD | NEW |