3 #include "ParagraphList.h"
9 ////////// The ParagraphList::iterator
11 ParagraphList::iterator::iterator()
16 ParagraphList::iterator::iterator(Paragraph * p)
21 ParagraphList::iterator::reference
22 ParagraphList::iterator::operator*()
28 ParagraphList::iterator::pointer
29 ParagraphList::iterator::operator->()
35 ParagraphList::iterator &
36 ParagraphList::iterator::operator++()
43 ParagraphList::iterator
44 ParagraphList::iterator::operator++(int)
52 ParagraphList::iterator &
53 ParagraphList::iterator::operator--()
60 ParagraphList::iterator
61 ParagraphList::iterator::operator--(int)
69 bool operator==(ParagraphList::iterator const & i1,
70 ParagraphList::iterator const & i2)
72 return &(*const_cast<ParagraphList::iterator&>(i1))
73 == &(*const_cast<ParagraphList::iterator&>(i2));
77 bool operator!=(ParagraphList::iterator const & i1,
78 ParagraphList::iterator const & i2)
84 ////////// The ParagraphList proper
87 ParagraphList::ParagraphList()
92 ParagraphList::ParagraphList(ParagraphList const & pl)
96 ParagraphList::iterator it = pl.begin();
97 ParagraphList::iterator end = pl.end();
98 for (; it != end; ++it) {
104 ParagraphList & ParagraphList::operator=(ParagraphList const & rhs)
106 ParagraphList tmp(rhs);
107 std::swap(parlist, tmp.parlist);
112 ParagraphList::iterator
113 ParagraphList::insert(ParagraphList::iterator it, Paragraph * par)
116 Paragraph * prev = it->prev_par_;
117 par->next_par_ = &*it;
118 par->prev_par_ = prev;
119 prev->next_par_ = par;
121 } else if (parlist == 0) {
125 Paragraph * last = parlist;
126 while (last->next_par_)
127 last = last->next_par_;
128 last->next_par_ = par;
129 par->prev_par_ = last;
131 return iterator(par);
136 void ParagraphList::insert(iterator pos, iterator beg, iterator end)
138 for (; beg != end; ++beg) {
139 insert(pos, new Paragraph(*beg, false));
144 void ParagraphList::assign(iterator beg, iterator end)
147 for (; beg != end; ++beg) {
153 void ParagraphList::splice(iterator pos, ParagraphList & pl)
158 Paragraph * first = pl.parlist;
159 Paragraph * last = first;
160 while (last->next_par_)
161 last = last->next_par_;
167 Paragraph * last_par = &back();
168 last_par->next_par_ = first;
169 first->prev_par_ = last_par;
171 } else if (pos == begin()) {
172 last->next_par_ = parlist;
173 parlist->prev_par_ = last;
176 Paragraph * pos_par = &*pos;
177 Paragraph * before_pos = pos_par->prev_par_;
179 before_pos->next_par_ = first;
180 first->prev_par_ = before_pos;
181 last->next_par_ = pos_par;
182 pos_par->prev_par_ = last;
188 void ParagraphList::clear()
191 Paragraph * tmp = parlist->next_par_;
198 ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator it)
200 Paragraph * prev = it->prev_par_;
201 Paragraph * next = it->next_par_;
204 prev->next_par_ = next;
209 next->prev_par_ = prev;
216 ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator first,
217 ParagraphList::iterator last)
219 while (first != last) {
226 ParagraphList::iterator ParagraphList::begin()
228 return iterator(parlist);
232 ParagraphList::iterator ParagraphList::begin() const
234 return iterator(parlist);
238 ParagraphList::iterator ParagraphList::end()
244 ParagraphList::iterator ParagraphList::end() const
250 Paragraph const & ParagraphList::front() const
256 Paragraph & ParagraphList::front()
262 Paragraph const & ParagraphList::back() const
264 Paragraph * tmp = parlist;
265 while (tmp->next_par_)
266 tmp = tmp->next_par_;
271 Paragraph & ParagraphList::back()
273 Paragraph * tmp = parlist;
274 while (tmp->next_par_)
275 tmp = tmp->next_par_;
280 void ParagraphList::push_back(Paragraph const & pr)
282 Paragraph * p = new Paragraph(pr, false);
289 Paragraph * pos = parlist;
290 while (pos->next_par_)
291 pos = pos->next_par_;
297 int ParagraphList::size() const
299 // When we switch to a std::container this will be O(1)
300 // instead of O(n). (Lgb)
301 Paragraph * tmp = parlist;
305 tmp = tmp->next_par_;
311 bool ParagraphList::empty() const