}
+void ParagraphList::splice(iterator pos, ParagraphList & pl)
+{
+ if (pl.parlist == 0)
+ return;
+
+ Paragraph * first = pl.parlist;
+ Paragraph * last = first;
+#ifndef NO_NEXT
+ while (last->next_)
+ last = last->next_;
+
+ if (pos == end()) {
+ if (parlist == 0) {
+ parlist = first;
+ } else {
+ Paragraph * last_par = &back();
+ last_par->next_ = first;
+ first->previous_ = last_par;
+ }
+ } else if (pos == begin()) {
+ last->next_ = parlist;
+ parlist->previous_ = last;
+ parlist = first;
+ } else {
+ Paragraph * pos_par = &*pos;
+ Paragraph * before_pos = pos_par->previous_;
+
+ before_pos->next_ = first;
+ first->previous_ = before_pos;
+ last->next_ = pos_par;
+ pos_par->previous_ = last;
+ }
+ pl.parlist = 0;
+#else
+ while (last->next_par_)
+ last = last->next_par_;
+
+ if (pos == end()) {
+ if (parlist == 0) {
+ parlist = first;
+ } else {
+ Paragraph * last_par = &back();
+ last_par->next_par_ = first;
+ first->prev_par_ = last_par;
+ }
+ } else if (pos == begin()) {
+ last->next_par_ = parlist;
+ parlist->prev_par_ = last;
+ parlist = first;
+ } else {
+ Paragraph * pos_par = &*pos;
+ Paragraph * before_pos = pos_par->prev_par_;
+
+ before_pos->next_par_ = first;
+ first->prev_par_ = before_pos;
+ last->next_par_ = pos_par;
+ pos_par->prev_par_ = last;
+ }
+ pl.parlist = 0;
+#endif
+}
+
void ParagraphList::clear()
{
}
-void ParagraphList::erase(ParagraphList::iterator it)
+ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator it)
{
#ifndef NO_NEXT
Paragraph * prev = it->previous_;
it->previous_ = 0;
it->next_ = 0;
delete &*it;
+ return next;
#else
Paragraph * prev = it->prev_par_;
Paragraph * next = it->next_par_;
next->prev_par_ = prev;
delete &*it;
+ return next;
#endif
}
+ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator first,
+ ParagraphList::iterator last)
+{
+ while (first != last) {
+ erase(first++);
+ }
+ return last;
+}
+
+
ParagraphList::iterator ParagraphList::begin()
{
return iterator(parlist);