return !(i1 == i2);
}
-
+//////////
////////// The ParagraphList proper
+//////////
+
ParagraphList::ParagraphList()
: parlist(0)
{}
+ParagraphList::ParagraphList(ParagraphList const & pl)
+ : parlist(0)
+{
+ // Deep copy.
+ ParagraphList::iterator it = pl.begin();
+ ParagraphList::iterator end = pl.end();
+ for (; it != end; ++it) {
+ push_back(new Paragraph(*it, false));
+ }
+}
+
+
+ParagraphList & ParagraphList::operator=(ParagraphList const & rhs)
+{
+ ParagraphList tmp(rhs);
+ std::swap(parlist, tmp.parlist);
+ return *this;
+}
+
+
ParagraphList::iterator
ParagraphList::insert(ParagraphList::iterator it, Paragraph * par)
{
}
+
+void ParagraphList::insert(iterator pos, iterator beg, iterator end)
+{
+ for (; beg != end; ++beg) {
+ insert(pos, new Paragraph(*beg, false));
+ }
+}
+
+
+void ParagraphList::assign(iterator beg, iterator end)
+{
+ clear();
+ for (; beg != end; ++beg) {
+ push_back(new Paragraph(*beg, false));
+ }
+}
+
+
+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()
{
#ifndef NO_NEXT