| 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 22 matching lines...) Expand all Loading... |
| 33 // Because of |Range| objects consume heap memory and inserted into |Range| | 33 // Because of |Range| objects consume heap memory and inserted into |Range| |
| 34 // object list in |Document| for relocation. These operations are redundant | 34 // object list in |Document| for relocation. These operations are redundant |
| 35 // if |Range| objects doesn't live after DOM mutation. | 35 // if |Range| objects doesn't live after DOM mutation. |
| 36 // | 36 // |
| 37 template <typename Strategy> | 37 template <typename Strategy> |
| 38 class CORE_TEMPLATE_CLASS_EXPORT EphemeralRangeTemplate final { | 38 class CORE_TEMPLATE_CLASS_EXPORT EphemeralRangeTemplate final { |
| 39 STACK_ALLOCATED(); | 39 STACK_ALLOCATED(); |
| 40 public: | 40 public: |
| 41 EphemeralRangeTemplate(const PositionAlgorithm<Strategy>& start, const Posit
ionAlgorithm<Strategy>& end); | 41 EphemeralRangeTemplate(const PositionAlgorithm<Strategy>& start, const Posit
ionAlgorithm<Strategy>& end); |
| 42 EphemeralRangeTemplate(const EphemeralRangeTemplate& other); | 42 EphemeralRangeTemplate(const EphemeralRangeTemplate& other); |
| 43 // |position| should be null or in-document. | 43 // |position| should be |Position::isNull()| or in-document. |
| 44 explicit EphemeralRangeTemplate(const PositionAlgorithm<Strategy>& /* positi
on */); | 44 explicit EphemeralRangeTemplate(const PositionAlgorithm<Strategy>& /* positi
on */); |
| 45 // When |range| is nullptr, |EphemeralRangeTemplate| is null. | 45 // When |range| is nullptr, |EphemeralRangeTemplate| is |isNull()|. |
| 46 explicit EphemeralRangeTemplate(const Range* /* range */); | 46 explicit EphemeralRangeTemplate(const Range* /* range */); |
| 47 EphemeralRangeTemplate(); | 47 EphemeralRangeTemplate(); |
| 48 ~EphemeralRangeTemplate(); | 48 ~EphemeralRangeTemplate(); |
| 49 | 49 |
| 50 EphemeralRangeTemplate<Strategy>& operator=(const EphemeralRangeTemplate<Str
ategy>& other); | 50 EphemeralRangeTemplate<Strategy>& operator=(const EphemeralRangeTemplate<Str
ategy>& other); |
| 51 | 51 |
| 52 bool operator==(const EphemeralRangeTemplate<Strategy>& other) const; | 52 bool operator==(const EphemeralRangeTemplate<Strategy>& other) const; |
| 53 bool operator!=(const EphemeralRangeTemplate<Strategy>& other) const; | 53 bool operator!=(const EphemeralRangeTemplate<Strategy>& other) const; |
| 54 | 54 |
| 55 Document& document() const; | 55 Document& document() const; |
| 56 PositionAlgorithm<Strategy> startPosition() const; | 56 PositionAlgorithm<Strategy> startPosition() const; |
| 57 PositionAlgorithm<Strategy> endPosition() const; | 57 PositionAlgorithm<Strategy> endPosition() const; |
| 58 | 58 |
| 59 // Returns true if |m_startPositoin| == |m_endPosition| or |isNull()|. | 59 // Returns true if |m_startPositoin| == |m_endPosition| or |isNull()|. |
| 60 bool isCollapsed() const; | 60 bool isCollapsed() const; |
| 61 bool isNull() const { return !isNotNull(); } | 61 bool isNull() const |
| 62 bool isNotNull() const; | 62 { |
| 63 ASSERT(isValid()); |
| 64 return m_startPosition.isNull(); |
| 65 } |
| 66 bool isNotNull() const { return !isNull(); } |
| 63 | 67 |
| 64 DEFINE_INLINE_TRACE() | 68 DEFINE_INLINE_TRACE() |
| 65 { | 69 { |
| 66 visitor->trace(m_startPosition); | 70 visitor->trace(m_startPosition); |
| 67 visitor->trace(m_endPosition); | 71 visitor->trace(m_endPosition); |
| 68 } | 72 } |
| 69 | 73 |
| 70 // |node| should be in-document and valid for anchor node of | 74 // |node| should be in-document and valid for anchor node of |
| 71 // |PositionAlgorithm<Strategy>|. | 75 // |PositionAlgorithm<Strategy>|. |
| 72 static EphemeralRangeTemplate<Strategy> rangeOfContents(const Node& /* node
*/); | 76 static EphemeralRangeTemplate<Strategy> rangeOfContents(const Node& /* node
*/); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 87 extern template class CORE_EXTERN_TEMPLATE_EXPORT EphemeralRangeTemplate<Editing
InComposedTreeStrategy>; | 91 extern template class CORE_EXTERN_TEMPLATE_EXPORT EphemeralRangeTemplate<Editing
InComposedTreeStrategy>; |
| 88 using EphemeralRangeInComposedTree = EphemeralRangeTemplate<EditingInComposedTre
eStrategy>; | 92 using EphemeralRangeInComposedTree = EphemeralRangeTemplate<EditingInComposedTre
eStrategy>; |
| 89 | 93 |
| 90 // Returns a newly created |Range| object from |range| or |nullptr| if | 94 // Returns a newly created |Range| object from |range| or |nullptr| if |
| 91 // |range.isNull()| returns true. | 95 // |range.isNull()| returns true. |
| 92 CORE_EXPORT PassRefPtrWillBeRawPtr<Range> createRange(const EphemeralRange& /* r
ange */); | 96 CORE_EXPORT PassRefPtrWillBeRawPtr<Range> createRange(const EphemeralRange& /* r
ange */); |
| 93 | 97 |
| 94 } // namespace blink | 98 } // namespace blink |
| 95 | 99 |
| 96 #endif | 100 #endif |
| OLD | NEW |