-/* This file is part of
- * ======================================================
- *
- * LyX, The Document Processor
- *
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-2000 The LyX Team.
+/**
+ * \file texrow.C
+ * Copyright 1995-2002 the LyX Team
+ * Read the file COPYING
*
- * ====================================================== */
+ * \author Matthias Ettrich
+ */
#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include "texrow.h"
-#include "lyxparagraph.h"
#include "debug.h"
+#include <algorithm>
+
+using std::find_if;
+using std::endl;
+
+namespace {
+
+/// function object returning true when row number is found
+class same_rownumber {
+public:
+ same_rownumber(int row) : row_(row) {}
+ bool operator()(TexRow::RowList::value_type const & vt) const {
+ return vt.rownumber() == row_;
+ }
+
+private:
+ int row_;
+};
+
+} // namespace anon
+
-// Delete linked list
void TexRow::reset()
{
rowlist.clear();
count = 0;
- lastpar = 0;
+ lastid = -1;
lastpos = -1;
}
-// Defines paragraph and position for the beginning of this row
-void TexRow::start(LyXParagraph * par, int pos)
+void TexRow::start(int id, int pos)
{
- lastpar = par;
+ lastid = id;
lastpos = pos;
}
-// Insert node when line is completed
void TexRow::newline()
{
- RowItem tmp;
- tmp.pos = lastpos;
- if (lastpar)
- tmp.id = lastpar->id();
- else
- tmp.id = -1;
- tmp.rownumber = ++count;
+ int const id = lastid;
+ RowList::value_type tmp(id, lastpos, ++count);
rowlist.push_back(tmp);
}
-void TexRow::getIdFromRow(int row, int & id, int & pos)
+bool TexRow::getIdFromRow(int row, int & id, int & pos) const
{
- RowList::const_iterator cit = rowlist.begin();
- for (; cit != rowlist.end(); ++cit) {
- if ((*cit).rownumber == row) break;
- }
+ RowList::const_iterator cit =
+ find_if(rowlist.begin(), rowlist.end(),
+ same_rownumber(row));
+
if (cit != rowlist.end()) {
- RowList::iterator kit = rowlist.begin();
- // Increase the pos of all rows with the
- // same id (and where the pos is larger)
- // to avoid putting errorinsets at the
- // same pos.
- for(; kit != rowlist.end(); ++kit) {
- if (&(*kit) != &(*cit)
- && (*kit).id == (*cit).id
- && (*kit).pos >= (*cit).pos)
- (*kit).pos++;
- }
- id = (*cit).id;
- pos = (*cit).pos;
- } else {
- id = -1;
- pos = 0;
+ id = cit->id();
+ pos = cit->pos();
+ return true;
}
+ id = -1;
+ pos = 0;
+ return false;
}
-TexRow & TexRow::operator+= (TexRow const & tr)
+TexRow & TexRow::operator+=(TexRow const & tr)
{
rowlist.insert(rowlist.end(), tr.rowlist.begin(), tr.rowlist.end());
return *this;
-}
+}