mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 21:21:32 +00:00
* output_latex.h:
* buffer.h: * CutAndPaste.h: * pariterator.h: * paragraph_funcs.h: * output_linuxdoc.h: * output_docbook.h: * insets/insettext.h: get forward declaration of ParagraphList * output_plaintext.C: * bufferlist.C: * undo.C: * lyxtext.h: * undo.h: * buffer_funcs.C: * insets/insetbibitem.C: get proper ParagraphList decls * output_linuxdoc.C (linuxdocParagraphs): * output_latex.C (TeXOnePar): * insets/insettext.C (appendParagraphs): * insets/insetcharstyle.C (docbook): use std::distance * CutAndPaste.C (pasteSelectionHelper, copySelectionHelper): * paragraph_funcs.C (breakParagraph, breakParagraphConservative, mergeParagraph): * text.C (acceptChange, rejectChange): * text2.C (deleteEmptyParagraphMechanism): use boost::next * output_docbook.C (several places): use boost::next and std::distance * ParagraphList_fwd.h: modify to provid a forward declaratoin of the new ParagraphList. * RandomAccessList.h: New container for Paragraphs from Abdelrazak Younes * ParagraphList.h: new file, setup user of RandomAccessList * paragraph.C: remove ParagraphList constructor from this file git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13467 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
399e6e788c
commit
9d6cad3fe6
@ -35,8 +35,10 @@ src/frontends/controllers/character.C
|
||||
src/frontends/controllers/frnt_lang.C
|
||||
src/frontends/controllers/helper_funcs.C
|
||||
src/frontends/gtk/Dialogs.C
|
||||
src/frontends/gtk/GAboutlyx.C
|
||||
src/frontends/gtk/GBC.h
|
||||
src/frontends/gtk/GBibItem.C
|
||||
src/frontends/gtk/GBibtex.C
|
||||
src/frontends/gtk/GBox.C
|
||||
src/frontends/gtk/GBranch.C
|
||||
src/frontends/gtk/GChanges.C
|
||||
@ -54,6 +56,7 @@ src/frontends/gtk/GMathPanel.C
|
||||
src/frontends/gtk/GMathsMatrix.C
|
||||
src/frontends/gtk/GNote.C
|
||||
src/frontends/gtk/GParagraph.C
|
||||
src/frontends/gtk/GPreferences.C
|
||||
src/frontends/gtk/GRef.C
|
||||
src/frontends/gtk/GSearch.C
|
||||
src/frontends/gtk/GSendto.C
|
||||
@ -114,6 +117,54 @@ src/frontends/qt2/Qt2BC.h
|
||||
src/frontends/qt2/QtView.C
|
||||
src/frontends/qt2/floatplacement.C
|
||||
src/frontends/qt2/validators.C
|
||||
src/frontends/qt4/Alert_pimpl.C
|
||||
src/frontends/qt4/BulletsModule.C
|
||||
src/frontends/qt4/Dialogs.C
|
||||
src/frontends/qt4/FileDialog.C
|
||||
src/frontends/qt4/QAbout.C
|
||||
src/frontends/qt4/QBibitem.C
|
||||
src/frontends/qt4/QBibtex.C
|
||||
src/frontends/qt4/QBox.C
|
||||
src/frontends/qt4/QBoxDialog.C
|
||||
src/frontends/qt4/QBranch.C
|
||||
src/frontends/qt4/QBranches.C
|
||||
src/frontends/qt4/QChanges.C
|
||||
src/frontends/qt4/QCharacter.C
|
||||
src/frontends/qt4/QCitation.C
|
||||
src/frontends/qt4/QCommandBuffer.C
|
||||
src/frontends/qt4/QDelimiterDialog.C
|
||||
src/frontends/qt4/QDocument.C
|
||||
src/frontends/qt4/QDocumentDialog.C
|
||||
src/frontends/qt4/QERT.C
|
||||
src/frontends/qt4/QExternal.C
|
||||
src/frontends/qt4/QFloat.C
|
||||
src/frontends/qt4/QGraphics.C
|
||||
src/frontends/qt4/QInclude.C
|
||||
src/frontends/qt4/QMath.C
|
||||
src/frontends/qt4/QMathDialog.C
|
||||
src/frontends/qt4/QMathMatrixDialog.C
|
||||
src/frontends/qt4/QNote.C
|
||||
src/frontends/qt4/QParagraph.C
|
||||
src/frontends/qt4/QPrefs.C
|
||||
src/frontends/qt4/QPrefsDialog.C
|
||||
src/frontends/qt4/QPrint.C
|
||||
src/frontends/qt4/QRef.C
|
||||
src/frontends/qt4/QSearch.C
|
||||
src/frontends/qt4/QSendto.C
|
||||
src/frontends/qt4/QShowFile.C
|
||||
src/frontends/qt4/QSpellchecker.C
|
||||
src/frontends/qt4/QTabular.C
|
||||
src/frontends/qt4/QTabularCreate.C
|
||||
src/frontends/qt4/QTexinfo.C
|
||||
src/frontends/qt4/QThesaurus.C
|
||||
src/frontends/qt4/QToc.C
|
||||
src/frontends/qt4/QURL.C
|
||||
src/frontends/qt4/QVSpace.C
|
||||
src/frontends/qt4/QWrap.C
|
||||
src/frontends/qt4/Qt2BC.h
|
||||
src/frontends/qt4/QtView.C
|
||||
src/frontends/qt4/floatplacement.C
|
||||
src/frontends/qt4/validators.C
|
||||
src/frontends/xforms/Alert_pimpl.C
|
||||
src/frontends/xforms/ColorHandler.C
|
||||
src/frontends/xforms/Dialogs.C
|
||||
|
@ -214,14 +214,16 @@ pasteSelectionHelper(Buffer const & buffer,
|
||||
|
||||
// Paste it!
|
||||
if (empty) {
|
||||
pars.insert(pars.begin() + pit, insertion.begin(),
|
||||
pars.insert(boost::next(pars.begin(), pit),
|
||||
insertion.begin(),
|
||||
insertion.end());
|
||||
|
||||
// merge the empty par with the last par of the insertion
|
||||
mergeParagraph(buffer.params(), pars,
|
||||
pit + insertion.size() - 1);
|
||||
} else {
|
||||
pars.insert(pars.begin() + pit + 1, insertion.begin(),
|
||||
pars.insert(boost::next(pars.begin(), pit + 1),
|
||||
insertion.begin(),
|
||||
insertion.end());
|
||||
|
||||
// merge the first par of the insertion with the current par
|
||||
@ -314,7 +316,8 @@ void copySelectionHelper(ParagraphList & pars,
|
||||
BOOST_ASSERT(startpit != endpit || start <= end);
|
||||
|
||||
// Clone the paragraphs within the selection.
|
||||
ParagraphList paragraphs(pars.begin() + startpit, pars.begin() + endpit + 1);
|
||||
ParagraphList paragraphs(boost::next(pars.begin(), startpit),
|
||||
boost::next(pars.begin(), endpit + 1));
|
||||
|
||||
for_each(paragraphs.begin(), paragraphs.end(), resetOwnerAndChanges());
|
||||
|
||||
|
@ -14,6 +14,8 @@
|
||||
#ifndef CUTANDPASTE_H
|
||||
#define CUTANDPASTE_H
|
||||
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include "support/types.h"
|
||||
|
||||
#include <string>
|
||||
@ -23,7 +25,6 @@ class Buffer;
|
||||
class ErrorList;
|
||||
class LyXTextClass;
|
||||
class LCursor;
|
||||
class ParagraphList;
|
||||
|
||||
///
|
||||
namespace lyx {
|
||||
|
22
src/ParagraphList.h
Normal file
22
src/ParagraphList.h
Normal file
@ -0,0 +1,22 @@
|
||||
// -*- C++ -*-
|
||||
/**
|
||||
* \file ParagraphList_fwd.h
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
* \author Angus Leeming
|
||||
*
|
||||
* Full author contact details are available in file CREDITS.
|
||||
*/
|
||||
|
||||
#ifndef PARAGRAPH_LIST_H
|
||||
#define PARAGRAPH_LIST_H
|
||||
|
||||
#include "paragraph.h"
|
||||
|
||||
#include "support/RandomAccessList.h"
|
||||
|
||||
/// Container for all kind of Paragraphs used in Lyx.
|
||||
typedef RandomAccessList<Paragraph> ParagraphList;
|
||||
|
||||
#endif
|
@ -12,22 +12,11 @@
|
||||
#ifndef PARAGRAPH_LIST_FWD_H
|
||||
#define PARAGRAPH_LIST_FWD_H
|
||||
|
||||
#include "paragraph.h"
|
||||
template <class T>
|
||||
class RandomAccessList;
|
||||
|
||||
#include <vector>
|
||||
class Paragraph;
|
||||
|
||||
class ParagraphList : public std::vector<Paragraph>
|
||||
{
|
||||
public:
|
||||
///
|
||||
typedef std::vector<Paragraph> BaseType;
|
||||
///
|
||||
ParagraphList();
|
||||
///
|
||||
template <class Iter>
|
||||
ParagraphList(Iter beg, Iter end)
|
||||
: BaseType(beg, end)
|
||||
{}
|
||||
};
|
||||
typedef RandomAccessList<Paragraph> ParagraphList;
|
||||
|
||||
#endif
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "InsetList.h"
|
||||
|
||||
#include "dociterator.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include "support/limited_stack.h"
|
||||
#include "support/types.h"
|
||||
@ -42,7 +43,6 @@ class LaTeXFeatures;
|
||||
class Language;
|
||||
class MacroData;
|
||||
class OutputParams;
|
||||
class ParagraphList;
|
||||
class ParConstIterator;
|
||||
class ParIterator;
|
||||
class TeXErrors;
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "lyxtextclass.h"
|
||||
#include "paragraph.h"
|
||||
#include "paragraph_funcs.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
#include "ParagraphParameters.h"
|
||||
#include "pariterator.h"
|
||||
#include "lyxvc.h"
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "lyx_main.h"
|
||||
#include "output_latex.h"
|
||||
#include "paragraph.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
|
||||
#include "frontends/Alert.h"
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include "lyxfont.h"
|
||||
#include "lyxlex.h"
|
||||
#include "paragraph.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
|
||||
#include "frontends/font_metrics.h"
|
||||
|
||||
|
@ -289,6 +289,7 @@ int InsetCharStyle::linuxdoc(Buffer const & buf, ostream & os,
|
||||
int InsetCharStyle::docbook(Buffer const & buf, ostream & os,
|
||||
OutputParams const & runparams) const
|
||||
{
|
||||
ParagraphList::const_iterator beg = paragraphs().begin();
|
||||
ParagraphList::const_iterator par = paragraphs().begin();
|
||||
ParagraphList::const_iterator end = paragraphs().end();
|
||||
|
||||
@ -298,7 +299,7 @@ int InsetCharStyle::docbook(Buffer const & buf, ostream & os,
|
||||
|
||||
for (; par != end; ++par) {
|
||||
par->simpleDocBookOnePar(buf, os, runparams,
|
||||
outerFont(par - paragraphs().begin(),
|
||||
outerFont(std::distance(beg, par),
|
||||
paragraphs()));
|
||||
}
|
||||
|
||||
|
@ -422,7 +422,8 @@ void InsetText::appendParagraphs(Buffer * buffer, ParagraphList & plist)
|
||||
ParagraphList::iterator pit = plist.begin();
|
||||
ParagraphList::iterator ins = pl.insert(pl.end(), *pit);
|
||||
++pit;
|
||||
mergeParagraph(buffer->params(), pl, ins - pl.begin() - 1);
|
||||
mergeParagraph(buffer->params(), pl,
|
||||
std::distance(pl.begin(), ins) - 1);
|
||||
|
||||
for_each(pit, plist.end(),
|
||||
bind(&ParagraphList::push_back, ref(pl), _1));
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "RowList_fwd.h"
|
||||
#include "lyxfont.h"
|
||||
#include "lyxtext.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include "support/types.h"
|
||||
|
||||
@ -27,7 +28,6 @@ class BufferView;
|
||||
class CursorSlice;
|
||||
class Dimension;
|
||||
class LColor_color;
|
||||
class ParagraphList;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include "lyxfont.h"
|
||||
#include "layout.h"
|
||||
#include "lyxlayout_ptr_fwd.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include "debug.h"
|
||||
#include "paragraph.h"
|
||||
#include "paragraph_funcs.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
#include "ParagraphParameters.h"
|
||||
#include "sgml.h"
|
||||
|
||||
@ -47,7 +47,7 @@ namespace {
|
||||
ParagraphList::const_iterator searchParagraph(ParagraphList::const_iterator const & par,
|
||||
ParagraphList::const_iterator const & pend)
|
||||
{
|
||||
ParagraphList::const_iterator p = par + 1;
|
||||
ParagraphList::const_iterator p = boost::next(par);
|
||||
|
||||
for( ; p != pend && p->layout()->latextype == LATEX_PARAGRAPH; ++p);
|
||||
|
||||
@ -59,7 +59,7 @@ ParagraphList::const_iterator searchCommand(ParagraphList::const_iterator const
|
||||
ParagraphList::const_iterator const & pend)
|
||||
{
|
||||
LyXLayout_ptr const & bstyle = par->layout();
|
||||
ParagraphList::const_iterator p = par + 1;
|
||||
ParagraphList::const_iterator p = boost::next(par);
|
||||
|
||||
for( ; p != pend; ++p) {
|
||||
LyXLayout_ptr const & style = p->layout();
|
||||
@ -74,7 +74,7 @@ ParagraphList::const_iterator searchEnvironment(ParagraphList::const_iterator co
|
||||
ParagraphList::const_iterator const & pend)
|
||||
{
|
||||
LyXLayout_ptr const & bstyle = par->layout();
|
||||
ParagraphList::const_iterator p = par + 1;
|
||||
ParagraphList::const_iterator p = boost::next(par);
|
||||
for( ; p != pend; ++p) {
|
||||
LyXLayout_ptr const & style = p->layout();
|
||||
if( style->latextype == LATEX_COMMAND)
|
||||
@ -108,10 +108,10 @@ ParagraphList::const_iterator makeParagraph(Buffer const & buf,
|
||||
if (par != pbegin)
|
||||
os << '\n';
|
||||
if (par->layout() == defaultstyle && par->emptyTag()) {
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs));
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs));
|
||||
} else {
|
||||
sgml::openTag(buf, os, runparams, *par);
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs));
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs));
|
||||
sgml::closeTag(os, *par);
|
||||
}
|
||||
}
|
||||
@ -170,7 +170,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
|
||||
case LATEX_ITEM_ENVIRONMENT: {
|
||||
if(par->params().depth() == pbegin->params().depth()) {
|
||||
sgml::openTag(os, wrapper);
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs), sep);
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs), sep);
|
||||
sgml::closeTag(os, wrapper);
|
||||
++par;
|
||||
}
|
||||
@ -239,7 +239,7 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf,
|
||||
|
||||
// Opend inner tag and close inner tags
|
||||
sgml::openTag(os, bstyle->innertag());
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs));
|
||||
par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs));
|
||||
sgml::closeTag(os, bstyle->innertag());
|
||||
os << '\n';
|
||||
|
||||
|
@ -13,11 +13,12 @@
|
||||
#ifndef OUTPUT_DOCBOOK_H
|
||||
#define OUTPUT_DOCBOOK_H
|
||||
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
class Buffer;
|
||||
class OutputParams;
|
||||
class ParagraphList;
|
||||
|
||||
///
|
||||
void docbookParagraphs(ParagraphList const & subset,
|
||||
|
@ -333,7 +333,7 @@ TeXOnePar(Buffer const & buf,
|
||||
|
||||
os << everypar;
|
||||
bool need_par = pit->simpleTeXOnePar(buf, bparams,
|
||||
outerFont(pit - paragraphs.begin(), paragraphs),
|
||||
outerFont(std::distance(paragraphs.begin(), pit), paragraphs),
|
||||
os, texrow, runparams);
|
||||
|
||||
// Make sure that \\par is done with the font of the last
|
||||
@ -346,7 +346,7 @@ TeXOnePar(Buffer const & buf,
|
||||
// We do not need to use to change the font for the last paragraph
|
||||
// or for a command.
|
||||
LyXFont const outerfont =
|
||||
outerFont(pit - paragraphs.begin(),
|
||||
outerFont(std::distance(paragraphs.begin(), pit),
|
||||
paragraphs);
|
||||
|
||||
LyXFont const font =
|
||||
|
@ -12,11 +12,12 @@
|
||||
#ifndef OUTPUT_LATEX_H
|
||||
#define OUTPUT_LATEX_H
|
||||
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
class Buffer;
|
||||
class OutputParams;
|
||||
class ParagraphList;
|
||||
class TexRow;
|
||||
|
||||
/// Just a wrapper for the method below, first creating the ofstream.
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "bufferparams.h"
|
||||
#include "paragraph.h"
|
||||
#include "paragraph_funcs.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
#include "ParagraphParameters.h"
|
||||
#include "sgml.h"
|
||||
|
||||
@ -133,7 +133,7 @@ void linuxdocParagraphs(Buffer const & buf,
|
||||
}
|
||||
|
||||
pit->simpleLinuxDocOnePar(buf, os,
|
||||
outerFont(pit - paragraphs.begin(), paragraphs),
|
||||
outerFont(std::distance(paragraphs.begin(), pit), paragraphs),
|
||||
runparams, depth);
|
||||
|
||||
os << "\n";
|
||||
|
@ -13,10 +13,11 @@
|
||||
#ifndef OUTPUT_LINUXDOC_H
|
||||
#define OUTPUT_LINUXDOC_H
|
||||
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
class Buffer;
|
||||
class ParagraphList;
|
||||
class OutputParams;
|
||||
|
||||
///
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include "output.h"
|
||||
#include "outputparams.h"
|
||||
#include "paragraph.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
#include "ParagraphParameters.h"
|
||||
|
||||
#include "support/lstrings.h"
|
||||
|
@ -66,10 +66,6 @@ using std::ostream;
|
||||
using std::ostringstream;
|
||||
|
||||
|
||||
ParagraphList::ParagraphList()
|
||||
{}
|
||||
|
||||
|
||||
Paragraph::Paragraph()
|
||||
: begin_of_body_(0), pimpl_(new Paragraph::Pimpl(this))
|
||||
{
|
||||
|
@ -96,7 +96,8 @@ void breakParagraph(BufferParams const & bparams,
|
||||
{
|
||||
// create a new paragraph, and insert into the list
|
||||
ParagraphList::iterator tmp =
|
||||
pars.insert(pars.begin() + par_offset + 1, Paragraph());
|
||||
pars.insert(boost::next(pars.begin(), par_offset + 1),
|
||||
Paragraph());
|
||||
|
||||
Paragraph & par = pars[par_offset];
|
||||
|
||||
@ -193,7 +194,8 @@ void breakParagraphConservative(BufferParams const & bparams,
|
||||
ParagraphList & pars, pit_type par_offset, pos_type pos)
|
||||
{
|
||||
// create a new paragraph
|
||||
Paragraph & tmp = *pars.insert(pars.begin() + par_offset + 1, Paragraph());
|
||||
Paragraph & tmp = *pars.insert(boost::next(pars.begin(), par_offset + 1),
|
||||
Paragraph());
|
||||
Paragraph & par = pars[par_offset];
|
||||
|
||||
if (bparams.tracking_changes)
|
||||
@ -259,7 +261,7 @@ void mergeParagraph(BufferParams const & bparams,
|
||||
// Move the change status of "carriage return" over
|
||||
par.setChange(par.size(), cr);
|
||||
|
||||
pars.erase(pars.begin() + par_offset + 1);
|
||||
pars.erase(boost::next(pars.begin(), par_offset + 1));
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,6 +12,8 @@
|
||||
#ifndef PARAGRAPH_FUNCS_H
|
||||
#define PARAGRAPH_FUNCS_H
|
||||
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include "support/types.h"
|
||||
|
||||
class Buffer;
|
||||
@ -19,7 +21,6 @@ class BufferParams;
|
||||
class InsetBase;
|
||||
class LyXFont;
|
||||
class Paragraph;
|
||||
class ParagraphList;
|
||||
|
||||
/**
|
||||
* This breaks a paragraph at the specified position.
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define PARITERATOR_H
|
||||
|
||||
#include "dociterator.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
|
||||
#include "support/types.h"
|
||||
|
||||
@ -24,7 +25,6 @@
|
||||
|
||||
class InsetBase;
|
||||
class LyXText;
|
||||
class ParagraphList;
|
||||
|
||||
|
||||
class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
|
||||
|
279
src/support/RandomAccessList.h
Normal file
279
src/support/RandomAccessList.h
Normal file
@ -0,0 +1,279 @@
|
||||
// -*- C++ -*-
|
||||
/**
|
||||
* \file RandomAccessList.h
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
* \author Abdelrazak Younes
|
||||
*
|
||||
* Full author contact details are available in file CREDITS.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef RANDOM_ACESS_LIST_H
|
||||
#define RANDOM_ACESS_LIST_H
|
||||
|
||||
//#include "debug.h"
|
||||
|
||||
#include <boost/utility.hpp>
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <algorithm>
|
||||
|
||||
#define USE_OLD_ITERATOR 1
|
||||
|
||||
/// Random Access List.
|
||||
/**
|
||||
This templatized class provide a std::vector like interface to a
|
||||
standard std::list underneath. An important property is that it
|
||||
keeps the std::list::iterator interface. A typical use would be:
|
||||
|
||||
typedef RandomAccessList<some_class> MyContainer;
|
||||
|
||||
Then you can use MyContainer as if it was a standard
|
||||
std::vector<some_class> for operator[] access and as if it was a
|
||||
standard std::list for iterator access. The main difference with
|
||||
std::vector is that insertion of elements is much less costly. Compared
|
||||
to a standard list alone, there is of course a small overhead because
|
||||
the class always keeps its internal vector of iterator (it_vector_) up
|
||||
to date.
|
||||
*/
|
||||
template <class T>
|
||||
class RandomAccessList {
|
||||
public:
|
||||
// types
|
||||
typedef std::list<T> Container;
|
||||
typedef typename Container::reference reference;
|
||||
typedef typename Container::const_reference const_reference;
|
||||
#if USE_OLD_ITERATOR
|
||||
// iterator (below)
|
||||
typedef typename Container::iterator iterator;
|
||||
// const_iterator (below)
|
||||
typedef typename Container::const_iterator const_iterator;
|
||||
#else
|
||||
// wip
|
||||
#endif
|
||||
typedef typename Container::size_type size_type;
|
||||
typedef typename Container::difference_type difference_type;
|
||||
typedef typename Container::value_type value_type;
|
||||
typedef typename Container::allocator_type allocator_type;
|
||||
typedef typename Container::pointer pointer;
|
||||
typedef typename Container::const_pointer const_pointer;
|
||||
// reverse_iterator
|
||||
// const_reverse_iterator
|
||||
|
||||
typedef std::vector<typename Container::iterator> IterCont;
|
||||
|
||||
// construct/copy/destroy
|
||||
|
||||
RandomAccessList()
|
||||
{}
|
||||
|
||||
// RandomAccessList(size_type n T const & value = T())
|
||||
|
||||
template<class InputIterator>
|
||||
RandomAccessList(InputIterator first, InputIterator last)
|
||||
{
|
||||
assign(first, last);
|
||||
}
|
||||
|
||||
|
||||
|
||||
RandomAccessList(RandomAccessList const & x)
|
||||
{
|
||||
assign(x.begin(), x.end());
|
||||
}
|
||||
|
||||
// ~RandomAccessList()
|
||||
|
||||
///
|
||||
RandomAccessList & operator=(RandomAccessList const & x)
|
||||
{
|
||||
assign(x.begin(), x.end());
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<class InputIterator>
|
||||
void assign(InputIterator first, InputIterator last)
|
||||
{
|
||||
container_.assign(first, last);
|
||||
recreateVector();
|
||||
}
|
||||
|
||||
|
||||
// void assign(size_type n, T const & u);
|
||||
|
||||
// iterators
|
||||
|
||||
iterator begin()
|
||||
{
|
||||
return container_.begin();
|
||||
}
|
||||
|
||||
const_iterator begin() const
|
||||
{
|
||||
return container_.begin();
|
||||
}
|
||||
|
||||
iterator end()
|
||||
{
|
||||
return container_.end();
|
||||
}
|
||||
|
||||
const_iterator end() const
|
||||
{
|
||||
return container_.end();
|
||||
}
|
||||
|
||||
// reverse_iterator rbegin();
|
||||
// const_reverse_iterator rbegin() const;
|
||||
// reverse_iterator rend();
|
||||
// const_reverse_iterator rend() const;
|
||||
|
||||
// capacity
|
||||
size_type size() const
|
||||
{
|
||||
return iterCont_.size();
|
||||
}
|
||||
|
||||
size_type max_size() const
|
||||
{
|
||||
return iterCont_.max_size();
|
||||
}
|
||||
|
||||
// void resize(size_type sz, T c = T());
|
||||
|
||||
size_type capacity() const
|
||||
{
|
||||
return iterCont_.capacity();
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return container_.empty();
|
||||
}
|
||||
|
||||
// void reserve(size_type n);
|
||||
|
||||
// element access
|
||||
|
||||
reference operator[](size_type pos)
|
||||
{
|
||||
return *iterCont_[pos];
|
||||
}
|
||||
|
||||
///
|
||||
const_reference operator[](size_type pos) const
|
||||
{
|
||||
return *iterCont_[pos];
|
||||
}
|
||||
|
||||
reference at(size_type pos)
|
||||
{
|
||||
return *iterCont_.at(pos);
|
||||
}
|
||||
|
||||
const_reference at(size_type pos) const
|
||||
{
|
||||
return *iterCont_.at(pos);
|
||||
}
|
||||
|
||||
reference front()
|
||||
{
|
||||
return container_.front();
|
||||
}
|
||||
|
||||
const_reference front() const
|
||||
{
|
||||
return container_.front();
|
||||
}
|
||||
|
||||
reference back()
|
||||
{
|
||||
return container_.back();
|
||||
}
|
||||
|
||||
const_reference back() const
|
||||
{
|
||||
return container_.back();
|
||||
}
|
||||
|
||||
// modifiers
|
||||
|
||||
void push_back(T const & x)
|
||||
{
|
||||
typename Container::iterator it =
|
||||
container_.insert(container_.end(), x);
|
||||
iterCont_.push_back(it);
|
||||
}
|
||||
|
||||
void pop_back()
|
||||
{
|
||||
container_.pop_back();
|
||||
iterCont_.pop_back();
|
||||
}
|
||||
|
||||
iterator insert(iterator position, T const & x)
|
||||
{
|
||||
typename Container::iterator it =
|
||||
container_.insert(position, x);
|
||||
recreateVector();
|
||||
return it;
|
||||
}
|
||||
|
||||
// void insert(iterator position, size_type n, T const & x);
|
||||
|
||||
template<class InputIterator>
|
||||
void insert(iterator position,
|
||||
InputIterator first, InputIterator last)
|
||||
{
|
||||
container_.insert(position, first, last);
|
||||
recreateVector();
|
||||
}
|
||||
|
||||
iterator erase(iterator position)
|
||||
{
|
||||
typename Container::iterator it =
|
||||
container_.erase(position);
|
||||
recreateVector();
|
||||
return it;
|
||||
}
|
||||
|
||||
iterator erase(iterator first, iterator last)
|
||||
{
|
||||
typename Container::iterator it =
|
||||
container_.erase(first, last);
|
||||
recreateVector();
|
||||
return it;
|
||||
}
|
||||
|
||||
void swap(RandomAccessList & x)
|
||||
{
|
||||
std::swap(container_, x.container_);
|
||||
std::swap(iterCont_, x.iterCont_);
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
container_.clear();
|
||||
iterCont_.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
void recreateVector()
|
||||
{
|
||||
iterCont_.clear();
|
||||
typename Container::iterator beg = container_.begin();
|
||||
typename Container::iterator end = container_.end();
|
||||
for (; beg != end; ++beg)
|
||||
iterCont_.push_back(beg);
|
||||
}
|
||||
|
||||
/// Our container.
|
||||
Container container_;
|
||||
/// Our container of iterators.
|
||||
IterCont iterCont_;
|
||||
};
|
||||
|
||||
#endif
|
@ -1414,8 +1414,8 @@ void LyXText::acceptChange(LCursor & cur)
|
||||
if (type == Change::DELETED) {
|
||||
ParagraphList & plist = paragraphs();
|
||||
if (it.pit() + 1 < et.pit())
|
||||
pars_.erase(plist.begin() + it.pit() + 1,
|
||||
plist.begin() + et.pit());
|
||||
pars_.erase(boost::next(plist.begin(), it.pit() + 1),
|
||||
boost::next(plist.begin(), et.pit()));
|
||||
|
||||
// Paragraph merge if appropriate:
|
||||
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
|
||||
@ -1451,8 +1451,8 @@ void LyXText::rejectChange(LCursor & cur)
|
||||
if (type == Change::INSERTED) {
|
||||
ParagraphList & plist = paragraphs();
|
||||
if (it.pit() + 1 < et.pit())
|
||||
pars_.erase(plist.begin() + it.pit() + 1,
|
||||
plist.begin() + et.pit());
|
||||
pars_.erase(boost::next(plist.begin(), it.pit() + 1),
|
||||
boost::next(plist.begin(), et.pit()));
|
||||
// Paragraph merge if appropriate:
|
||||
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
|
||||
== Change::INSERTED) {
|
||||
|
@ -1258,7 +1258,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LCursor & cur, LCursor & old)
|
||||
max(old.pit() - 1, pit_type(0)),
|
||||
min(old.pit() + 1, old.lastpit()));
|
||||
ParagraphList & plist = old.text()->paragraphs();
|
||||
plist.erase(plist.begin() + old.pit());
|
||||
plist.erase(boost::next(plist.begin(), old.pit()));
|
||||
|
||||
// see #warning above
|
||||
if (cur.depth() >= old.depth()) {
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "BufferView.h"
|
||||
#include "lyxtext.h"
|
||||
#include "paragraph.h"
|
||||
#include "ParagraphList.h"
|
||||
|
||||
#include "mathed/math_support.h"
|
||||
#include "insets/inset.h"
|
||||
|
@ -17,7 +17,7 @@
|
||||
#define UNDO_H
|
||||
|
||||
#include "dociterator.h"
|
||||
#include "ParagraphList_fwd.h"
|
||||
#include "ParagraphList.h"
|
||||
#include "bufferparams.h"
|
||||
|
||||
#include "support/types.h"
|
||||
|
Loading…
Reference in New Issue
Block a user