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 const & p)
115 Paragraph * par = new Paragraph(p);
118 Paragraph * prev = it->prev_par_;
119 par->next_par_ = &*it;
120 par->prev_par_ = prev;
121 prev->next_par_ = par;
123 } else if (parlist == 0) {
127 Paragraph * last = parlist;
128 while (last->next_par_)
129 last = last->next_par_;
130 last->next_par_ = par;
131 par->prev_par_ = last;
133 return iterator(par);
138 void ParagraphList::insert(iterator pos, iterator beg, iterator end)
140 for (; beg != end; ++beg) {
146 void ParagraphList::assign(iterator beg, iterator end)
149 for (; beg != end; ++beg) {
155 void ParagraphList::splice(iterator pos, ParagraphList & pl)
160 Paragraph * first = pl.parlist;
161 Paragraph * last = first;
162 while (last->next_par_)
163 last = last->next_par_;
169 Paragraph * last_par = &back();
170 last_par->next_par_ = first;
171 first->prev_par_ = last_par;
173 } else if (pos == begin()) {
174 last->next_par_ = parlist;
175 parlist->prev_par_ = last;
178 Paragraph * pos_par = &*pos;
179 Paragraph * before_pos = pos_par->prev_par_;
181 before_pos->next_par_ = first;
182 first->prev_par_ = before_pos;
183 last->next_par_ = pos_par;
184 pos_par->prev_par_ = last;
190 void ParagraphList::clear()
193 Paragraph * tmp = parlist->next_par_;
200 ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator it)
202 Paragraph * prev = it->prev_par_;
203 Paragraph * next = it->next_par_;
206 prev->next_par_ = next;
211 next->prev_par_ = prev;
218 ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator first,
219 ParagraphList::iterator last)
221 while (first != last) {
228 ParagraphList::iterator ParagraphList::begin()
230 return iterator(parlist);
234 ParagraphList::iterator ParagraphList::begin() const
236 return iterator(parlist);
240 ParagraphList::iterator ParagraphList::end()
246 ParagraphList::iterator ParagraphList::end() const
252 Paragraph const & ParagraphList::front() const
258 Paragraph & ParagraphList::front()
264 Paragraph const & ParagraphList::back() const
266 Paragraph * tmp = parlist;
267 while (tmp->next_par_)
268 tmp = tmp->next_par_;
273 Paragraph & ParagraphList::back()
275 Paragraph * tmp = parlist;
276 while (tmp->next_par_)
277 tmp = tmp->next_par_;
282 void ParagraphList::push_back(Paragraph const & pr)
284 Paragraph * p = new Paragraph(pr);
291 Paragraph * pos = parlist;
292 while (pos->next_par_)
293 pos = pos->next_par_;
299 int ParagraphList::size() const
301 // When we switch to a std::container this will be O(1)
302 // instead of O(n). (Lgb)
303 Paragraph * tmp = parlist;
307 tmp = tmp->next_par_;
313 bool ParagraphList::empty() const