OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved. |
4 * Copyright (C) 2011 Google, Inc. All rights reserved. | 4 * Copyright (C) 2011 Google, Inc. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 if (!first_run_) | 74 if (!first_run_) |
75 first_run_ = run; | 75 first_run_ = run; |
76 else | 76 else |
77 last_run_->next_ = run; | 77 last_run_->next_ = run; |
78 last_run_ = run; | 78 last_run_ = run; |
79 run_count_++; | 79 run_count_++; |
80 } | 80 } |
81 | 81 |
82 template <class Run> | 82 template <class Run> |
83 inline void BidiRunList<Run>::PrependRun(Run* run) { | 83 inline void BidiRunList<Run>::PrependRun(Run* run) { |
84 ASSERT(!run->next_); | 84 DCHECK(!run->next_); |
85 | 85 |
86 if (!last_run_) | 86 if (!last_run_) |
87 last_run_ = run; | 87 last_run_ = run; |
88 else | 88 else |
89 run->next_ = first_run_; | 89 run->next_ = first_run_; |
90 first_run_ = run; | 90 first_run_ = run; |
91 run_count_++; | 91 run_count_++; |
92 } | 92 } |
93 | 93 |
94 template <class Run> | 94 template <class Run> |
95 inline void BidiRunList<Run>::MoveRunToEnd(Run* run) { | 95 inline void BidiRunList<Run>::MoveRunToEnd(Run* run) { |
96 ASSERT(first_run_); | 96 DCHECK(first_run_); |
97 ASSERT(last_run_); | 97 DCHECK(last_run_); |
98 ASSERT(run->next_); | 98 DCHECK(run->next_); |
99 | 99 |
100 Run* current = 0; | 100 Run* current = 0; |
101 Run* next = first_run_; | 101 Run* next = first_run_; |
102 while (next != run) { | 102 while (next != run) { |
103 current = next; | 103 current = next; |
104 next = current->Next(); | 104 next = current->Next(); |
105 } | 105 } |
106 | 106 |
107 if (!current) | 107 if (!current) |
108 first_run_ = run->Next(); | 108 first_run_ = run->Next(); |
109 else | 109 else |
110 current->next_ = run->next_; | 110 current->next_ = run->next_; |
111 | 111 |
112 run->next_ = 0; | 112 run->next_ = 0; |
113 last_run_->next_ = run; | 113 last_run_->next_ = run; |
114 last_run_ = run; | 114 last_run_ = run; |
115 } | 115 } |
116 | 116 |
117 template <class Run> | 117 template <class Run> |
118 inline void BidiRunList<Run>::MoveRunToBeginning(Run* run) { | 118 inline void BidiRunList<Run>::MoveRunToBeginning(Run* run) { |
119 ASSERT(first_run_); | 119 DCHECK(first_run_); |
120 ASSERT(last_run_); | 120 DCHECK(last_run_); |
121 ASSERT(run != first_run_); | 121 DCHECK_NE(run, first_run_); |
122 | 122 |
123 Run* current = first_run_; | 123 Run* current = first_run_; |
124 Run* next = current->Next(); | 124 Run* next = current->Next(); |
125 while (next != run) { | 125 while (next != run) { |
126 current = next; | 126 current = next; |
127 next = current->Next(); | 127 next = current->Next(); |
128 } | 128 } |
129 | 129 |
130 current->next_ = run->next_; | 130 current->next_ = run->next_; |
131 if (run == last_run_) | 131 if (run == last_run_) |
132 last_run_ = current; | 132 last_run_ = current; |
133 | 133 |
134 run->next_ = first_run_; | 134 run->next_ = first_run_; |
135 first_run_ = run; | 135 first_run_ = run; |
136 } | 136 } |
137 | 137 |
138 template <class Run> | 138 template <class Run> |
139 void BidiRunList<Run>::ReplaceRunWithRuns(Run* to_replace, | 139 void BidiRunList<Run>::ReplaceRunWithRuns(Run* to_replace, |
140 BidiRunList<Run>& new_runs) { | 140 BidiRunList<Run>& new_runs) { |
141 ASSERT(new_runs.RunCount()); | 141 DCHECK(new_runs.RunCount()); |
142 ASSERT(first_run_); | 142 DCHECK(first_run_); |
143 ASSERT(to_replace); | 143 DCHECK(to_replace); |
144 | 144 |
145 if (first_run_ == to_replace) { | 145 if (first_run_ == to_replace) { |
146 first_run_ = new_runs.FirstRun(); | 146 first_run_ = new_runs.FirstRun(); |
147 } else { | 147 } else { |
148 // Find the run just before "toReplace" in the list of runs. | 148 // Find the run just before "toReplace" in the list of runs. |
149 Run* previous_run = first_run_; | 149 Run* previous_run = first_run_; |
150 while (previous_run->Next() != to_replace) | 150 while (previous_run->Next() != to_replace) |
151 previous_run = previous_run->Next(); | 151 previous_run = previous_run->Next(); |
152 ASSERT(previous_run); | 152 DCHECK(previous_run); |
153 previous_run->SetNext(new_runs.FirstRun()); | 153 previous_run->SetNext(new_runs.FirstRun()); |
154 } | 154 } |
155 | 155 |
156 new_runs.LastRun()->SetNext(to_replace->Next()); | 156 new_runs.LastRun()->SetNext(to_replace->Next()); |
157 | 157 |
158 // Fix up any of other pointers which may now be stale. | 158 // Fix up any of other pointers which may now be stale. |
159 if (last_run_ == to_replace) | 159 if (last_run_ == to_replace) |
160 last_run_ = new_runs.LastRun(); | 160 last_run_ = new_runs.LastRun(); |
161 if (logically_last_run_ == to_replace) | 161 if (logically_last_run_ == to_replace) |
162 logically_last_run_ = new_runs.LogicallyLastRun(); | 162 logically_last_run_ = new_runs.LogicallyLastRun(); |
(...skipping 22 matching lines...) Expand all Loading... |
185 Run* s = curr->Next(); | 185 Run* s = curr->Next(); |
186 delete curr; | 186 delete curr; |
187 curr = s; | 187 curr = s; |
188 } | 188 } |
189 | 189 |
190 ClearWithoutDestroyingRuns(); | 190 ClearWithoutDestroyingRuns(); |
191 } | 191 } |
192 | 192 |
193 template <class Run> | 193 template <class Run> |
194 void BidiRunList<Run>::ReverseRuns(unsigned start, unsigned end) { | 194 void BidiRunList<Run>::ReverseRuns(unsigned start, unsigned end) { |
195 ASSERT(run_count_); | 195 DCHECK(run_count_); |
196 if (start >= end) | 196 if (start >= end) |
197 return; | 197 return; |
198 | 198 |
199 ASSERT(end < run_count_); | 199 DCHECK_LT(end, run_count_); |
200 | 200 |
201 // Get the item before the start of the runs to reverse and put it in | 201 // Get the item before the start of the runs to reverse and put it in |
202 // |beforeStart|. |curr| should point to the first run to reverse. | 202 // |beforeStart|. |curr| should point to the first run to reverse. |
203 Run* curr = first_run_; | 203 Run* curr = first_run_; |
204 Run* before_start = 0; | 204 Run* before_start = 0; |
205 unsigned i = 0; | 205 unsigned i = 0; |
206 while (i < start) { | 206 while (i < start) { |
207 i++; | 207 i++; |
208 before_start = curr; | 208 before_start = curr; |
209 curr = curr->Next(); | 209 curr = curr->Next(); |
(...skipping 26 matching lines...) Expand all Loading... |
236 first_run_ = end_run; | 236 first_run_ = end_run; |
237 | 237 |
238 start_run->next_ = after_end; | 238 start_run->next_ = after_end; |
239 if (!after_end) | 239 if (!after_end) |
240 last_run_ = start_run; | 240 last_run_ = start_run; |
241 } | 241 } |
242 | 242 |
243 } // namespace blink | 243 } // namespace blink |
244 | 244 |
245 #endif // BidiRunList | 245 #endif // BidiRunList |
OLD | NEW |