X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FInsetList.C;h=5cd85c14daf946221c05f22b552d68045b7ec193;hb=414a11684e77aee713135ae65ec7438cfc4b162f;hp=a4f03528254320daabb7af333ba86461ecf31b75;hpb=13349032cb4dc8ef44146aa652ff6bbff6698249;p=lyx.git diff --git a/src/InsetList.C b/src/InsetList.C index a4f0352825..5cd85c14da 100644 --- a/src/InsetList.C +++ b/src/InsetList.C @@ -1,155 +1,106 @@ +/** + * \file InsetList.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * \author Martin Vermeer + * + * Full author contact details are available in file CREDITS. + */ + #include #include "InsetList.h" -#include "debug.h" -#include "insets/inset.h" +#include "buffer.h" +#include "bufferparams.h" +#include "BranchList.h" +#include "BufferView.h" +#include "debug.h" -#include +#include "insets/insetbranch.h" using lyx::pos_type; -using std::lower_bound; -using std::upper_bound; using std::endl; +using std::lower_bound; + namespace { -struct MatchIt { - /// used by lower_bound and upper_bound - inline - int operator()(InsetList::InsetTable const & a, - InsetList::InsetTable const & b) const { - return a.pos < b.pos; +typedef InsetList::InsetTable Table; + +class InsetTablePosLess : public std::binary_function { +public: + bool operator()(Table const & t1, Table const & t2) const + { + return t1.pos < t2.pos; } }; -} - +} // namespace anon -InsetList::iterator::iterator(InsetList::List::iterator const & iter) - : it(iter) -{} - - -InsetList::iterator & InsetList::iterator::operator++() -{ - ++it; - return *this; -} - - -InsetList::iterator InsetList::iterator::operator++(int) -{ - iterator tmp = *this; - ++*this; - return tmp; -} - - -pos_type InsetList::iterator::getPos() const -{ - return it->pos; -} - - -Inset * InsetList::iterator::getInset() const -{ - return it->inset; -} - - -void InsetList::iterator::setInset(Inset * inset) -{ - it->inset = inset; -} InsetList::~InsetList() { // If we begin storing a shared_ptr in the List // this code can be removed. (Lgb) - List::iterator it = list.begin(); - List::iterator end = list.end(); + List::iterator it = list_.begin(); + List::iterator end = list_.end(); for (; it != end; ++it) { delete it->inset; } } -InsetList::iterator InsetList::begin() -{ - return iterator(list.begin()); -} - - -InsetList::iterator InsetList::end() -{ - return iterator(list.end()); -} - - -InsetList::iterator InsetList::begin() const +InsetList::iterator InsetList::insetIterator(pos_type pos) { - return iterator(const_cast(this)->list.begin()); -} - - -InsetList::iterator InsetList::end() const -{ - return iterator(const_cast(this)->list.end()); + InsetTable search_elem(pos, 0); + return lower_bound(list_.begin(), list_.end(), search_elem, + InsetTablePosLess()); } -InsetList::iterator -InsetList::insetIterator(pos_type pos) +InsetList::const_iterator InsetList::insetIterator(pos_type pos) const { InsetTable search_elem(pos, 0); - List::iterator it = lower_bound(list.begin(), - list.end(), - search_elem, MatchIt()); - return iterator(it); + return lower_bound(list_.begin(), list_.end(), search_elem, + InsetTablePosLess()); } -void InsetList::insert(Inset * inset, lyx::pos_type pos) +void InsetList::insert(InsetBase * inset, lyx::pos_type pos) { - InsetTable search_elem(pos, 0); - List::iterator it = lower_bound(list.begin(), - list.end(), - search_elem, MatchIt()); - if (it != list.end() && it->pos == pos) { + List::iterator end = list_.end(); + List::iterator it = insetIterator(pos); + if (it != end && it->pos == pos) { lyxerr << "ERROR (InsetList::insert): " << "There is an inset in position: " << pos << endl; } else { - list.insert(it, InsetTable(pos, inset)); + list_.insert(it, InsetTable(pos, inset)); } } void InsetList::erase(pos_type pos) { - InsetTable search_elem(pos, 0); - List::iterator it = - lower_bound(list.begin(), - list.end(), - search_elem, MatchIt()); - if (it != list.end() && it->pos == pos) { + List::iterator end = list_.end(); + List::iterator it = insetIterator(pos); + if (it != end && it->pos == pos) { delete it->inset; - list.erase(it); + list_.erase(it); } } -Inset * InsetList::release(pos_type pos) +InsetBase * InsetList::release(pos_type pos) { - InsetTable search_elem(pos, 0); - List::iterator it = - lower_bound(list.begin(), - list.end(), - search_elem, MatchIt()); - if (it != list.end() && it->pos == pos) { - Inset * tmp = it->inset; + List::iterator end = list_.end(); + List::iterator it = insetIterator(pos); + if (it != end && it->pos == pos) { + InsetBase * tmp = it->inset; it->inset = 0; return tmp; } @@ -157,14 +108,11 @@ Inset * InsetList::release(pos_type pos) } -Inset * InsetList::get(pos_type pos) const +InsetBase * InsetList::get(pos_type pos) const { - InsetTable search_elem(pos, 0); - List::iterator it = - lower_bound(const_cast(this)->list.begin(), - const_cast(this)->list.end(), - search_elem, MatchIt()); - if (it != const_cast(this)->list.end() && it->pos == pos) + List::const_iterator end = list_.end(); + List::const_iterator it = insetIterator(pos); + if (it != end && it->pos == pos) return it->inset; return 0; } @@ -172,11 +120,8 @@ Inset * InsetList::get(pos_type pos) const void InsetList::increasePosAfterPos(pos_type pos) { - InsetTable search_elem(pos, 0); - List::iterator it = lower_bound(list.begin(), - list.end(), - search_elem, MatchIt()); - List::iterator end = list.end(); + List::iterator end = list_.end(); + List::iterator it = insetIterator(pos); for (; it != end; ++it) { ++it->pos; } @@ -185,58 +130,9 @@ void InsetList::increasePosAfterPos(pos_type pos) void InsetList::decreasePosAfterPos(pos_type pos) { - InsetTable search_elem(pos, 0); - List::iterator end = list.end(); - List::iterator it = upper_bound(list.begin(), - end, - search_elem, MatchIt()); + List::iterator end = list_.end(); + List::iterator it = insetIterator(pos); for (; it != end; ++it) { --it->pos; } } - - -void InsetList::deleteInsetsLyXText(BufferView * bv) -{ - List::iterator it = list.begin(); - List::iterator end = list.end(); - for (; it != end; ++it) { - if (it->inset) { - if (it->inset->isTextInset()) { - static_cast - (it->inset)->deleteLyXText(bv, true); - } - } - } -} - - -void InsetList::resizeInsetsLyXText(BufferView * bv) -{ - List::iterator it = list.begin(); - List::iterator end = list.end(); - for (; it != end; ++it) { - if (it->inset) { - if (it->inset->isTextInset()) { - static_cast - (it->inset)->resizeLyXText(bv, true); - } - } - } -} - - - -bool operator==(InsetList::iterator const & i1, - InsetList::iterator const & i2) -{ - return i1.it == i2.it; - -} - - -bool operator!=(InsetList::iterator const & i1, - InsetList::iterator const & i2) -{ - return !(i1 == i2); -}