This patch is really only what is left of the old iterator patch
series. And basically all the stuff that was dependant upon boost
1.31.0.
I am not sure about the functor stuff herein, but the iterator adaptor
usage seems nice to me. Also the boost::next change is IMHO good.
(the deref is horrible, and I'll never apply that one...)
So if you have comments to this patch likes/dislikes I'd be happy to
receive them...
? BranchList_C.diff
? Config
? err.diff
? iterator-2.diff
? iterator-3.diff
? iterator-4.diff
? iterator-5.diff
? iterator-6.diff
? iterator-7.diff
? iterator.diff
? iters.diff
Index: src/BufferView_pimpl.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v
retrieving revision 1.501
diff -u -p -b -r1.501 BufferView_pimpl.C
--- src/BufferView_pimpl.C 4 Feb 2004 11:23:23 -0000 1.501
+++ src/BufferView_pimpl.C 5 Feb 2004 16:19:48 -0000
@@ -753,7 +753,9 @@ InsetBase * BufferView::Pimpl::getInsetB
find_if(Buffer::inset_iterator(
cursorPar(), cursor().pos()),
buffer_->inset_iterator_end(),
- lyx::compare_memfun(&Inset::lyxCode, code));
+ bind(equal_to<InsetOld::Code>(),
+ bind(Inset::lyxCode, _1),
+ code));
return it != buffer_->inset_iterator_end() ? (*it) : 0;
#else
// Ok, this is a little bit too brute force but it
Index: src/MenuBackend.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/MenuBackend.C,v
retrieving revision 1.95
diff -u -p -b -r1.95 MenuBackend.C
--- src/MenuBackend.C 31 Jan 2004 15:30:20 -0000 1.95
+++ src/MenuBackend.C 5 Feb 2004 16:19:49 -0000
@@ -44,6 +44,7 @@
#include "support/tostr.h"
#include <boost/bind.hpp>
+#include <boost/iterator/transform_iterator.hpp>
#include <algorithm>
@@ -53,11 +54,14 @@ using lyx::support::MakeDisplayPath;
using lyx::support::token;
using boost::bind;
+using boost::make_transform_iterator;
using std::auto_ptr;
using std::endl;
using std::equal_to;
+using std::find;
using std::find_if;
+using std::less;
using std::max;
using std::sort;
using std::string;
@@ -383,13 +387,6 @@ void Menu::checkShortcuts() const
namespace {
-class compare_format {
-public:
- bool operator()(Format const * p1, Format const * p2) {
- return *p1 < *p2;
- }
-};
-
string const limit_string_length(string const & str)
{
string::size_type const max_item_length = 45;
@@ -440,6 +437,15 @@ void expandDocuments(Menu & tomenu, LyXV
}
+// Helper function. Should be placed in support. (Lgb)
+// Does the standard or boost have anyting like this? (Lgb)
+template <typename Type>
+Type const & deref(Type const * t)
+{
+ return *t;
+}
+
+
void expandFormats(MenuItem::Kind kind, Menu & tomenu, LyXView const * view)
{
if (!view->buffer() && kind != MenuItem::ImportFormats) {
@@ -471,7 +477,11 @@ void expandFormats(MenuItem::Kind kind,
formats = Exporter::GetExportableFormats(*view->buffer(), false);
action = LFUN_EXPORT;
}
- sort(formats.begin(), formats.end(), compare_format());
+
+ sort(formats.begin(), formats.end(),
+ bind(less<Format>(),
+ bind(deref<Format>, _1),
+ bind(deref<Format>, _2)));
Formats::const_iterator fit = formats.begin();
Formats::const_iterator end = formats.end();
@@ -790,22 +800,13 @@ void MenuBackend::expand(Menu const & fr
bool Menu::hasSubmenu(string const & name) const
{
-#if 1
- return find_if(begin(), end(),
- bind(std::equal_to<string>(),
- bind(&MenuItem::submenuname, _1),
- name)) != end();
-#else
- // I would have prefered this, but I am not sure if it
- // makes a difference. (Lgb)
- return find_if(
+ return find(
make_transform_iterator(begin(),
bind(&MenuItem::submenuname, _1)),
make_transform_iterator(end(),
bind(&MenuItem::submenuname, _1)),
name
).base() != end();
-#endif
}
Index: src/bufferlist.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/bufferlist.C,v
retrieving revision 1.140
diff -u -p -b -r1.140 bufferlist.C
--- src/bufferlist.C 31 Jan 2004 15:30:20 -0000 1.140
+++ src/bufferlist.C 5 Feb 2004 16:19:49 -0000
@@ -26,9 +26,11 @@
#include "frontends/Alert.h"
#include "support/filetools.h"
-#include "support/lyxfunctional.h"
#include <boost/bind.hpp>
+#include <boost/function_output_iterator.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+
using lyx::support::AddName;
using lyx::support::bformat;
@@ -40,9 +42,11 @@ using lyx::support::removeAutosaveFile;
using lyx::support::prefixIs;
using boost::bind;
+using boost::make_transform_iterator;
using std::auto_ptr;
using std::endl;
+using std::equal_to;
using std::find;
using std::find_if;
using std::for_each;
@@ -193,9 +197,13 @@ bool BufferList::close(Buffer * buf, boo
vector<string> const BufferList::getFileNames() const
{
- vector<string> nvec;
- std::copy(bstore.begin(), bstore.end(),
- lyx::back_inserter_fun(nvec, &Buffer::fileName));
+ vector<string> nvec(
+ make_transform_iterator(bstore.begin(),
+ bind(&Buffer::fileName, _1)),
+ make_transform_iterator(bstore.end(),
+ bind(&Buffer::fileName, _1))
+ );
+
return nvec;
}
@@ -302,8 +310,9 @@ void BufferList::emergencyWrite(Buffer *
bool BufferList::exists(string const & s) const
{
return find_if(bstore.begin(), bstore.end(),
- lyx::compare_memfun(&Buffer::fileName, s))
- != bstore.end();
+ bind(equal_to<string>(),
+ bind(&Buffer::fileName, _1),
+ s)) != bstore.end();
}
@@ -320,7 +329,9 @@ Buffer * BufferList::getBuffer(string co
{
BufferStorage::iterator it =
find_if(bstore.begin(), bstore.end(),
- lyx::compare_memfun(&Buffer::fileName, s));
+ bind(equal_to<string>(),
+ bind(&Buffer::fileName, _1),
+ s));
return it != bstore.end() ? (*it) : 0;
}
Index: src/converter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/converter.C,v
retrieving revision 1.96
diff -u -p -b -r1.96 converter.C
--- src/converter.C 31 Jan 2004 15:30:20 -0000 1.96
+++ src/converter.C 5 Feb 2004 16:19:49 -0000
@@ -27,6 +27,7 @@
#include "support/path.h"
#include "support/systemcall.h"
+
using lyx::support::AddName;
using lyx::support::bformat;
using lyx::support::ChangeExtension;
@@ -507,10 +508,10 @@ bool Converters::scanLog(Buffer const &
namespace {
-class showMessage : public boost::signals::trackable {
+class showMessage : public std::unary_function<string, void>, public boost::signals::trackable {
public:
showMessage(Buffer const & b) : buffer_(b) {};
- void operator()(string const & m)
+ void operator()(string const & m) const
{
buffer_.message(m);
}
Index: src/format.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/format.C,v
retrieving revision 1.21
diff -u -p -b -r1.21 format.C
--- src/format.C 31 Jan 2004 15:30:21 -0000 1.21
+++ src/format.C 5 Feb 2004 16:19:49 -0000
@@ -24,6 +24,7 @@
#include "support/path.h"
#include "support/systemcall.h"
+
using lyx::support::bformat;
using lyx::support::compare_ascii_no_case;
using lyx::support::contains;
Index: src/lyxlex_pimpl.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxlex_pimpl.C,v
retrieving revision 1.42
diff -u -p -b -r1.42 lyxlex_pimpl.C
--- src/lyxlex_pimpl.C 31 Jan 2004 15:30:21 -0000 1.42
+++ src/lyxlex_pimpl.C 5 Feb 2004 16:19:49 -0000
@@ -20,6 +20,7 @@
#include "support/lyxalgo.h"
#include "support/lstrings.h"
+
using lyx::support::compare_ascii_no_case;
using lyx::support::getExtFromContents;
using lyx::support::MakeDisplayPath;
@@ -37,9 +38,12 @@ using std::ostream;
namespace {
-struct compare_tags : public std::binary_function<keyword_item, keyword_item, int> {
+struct compare_tags
+ : public std::binary_function<keyword_item, keyword_item, bool>
+{
// used by lower_bound, sort and sorted
- int operator()(keyword_item const & a, keyword_item const & b) const {
+ bool operator()(keyword_item const & a, keyword_item const & b) const
+ {
// we use the ascii version, because in turkish, 'i'
// is not the lowercase version of 'I', and thus
// turkish locale breaks parsing of tags.
Index: src/lyxtextclass.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtextclass.C,v
retrieving revision 1.46
diff -u -p -b -r1.46 lyxtextclass.C
--- src/lyxtextclass.C 31 Jan 2004 15:30:21 -0000 1.46
+++ src/lyxtextclass.C 5 Feb 2004 16:19:49 -0000
@@ -24,11 +24,16 @@
#include "support/lstrings.h"
#include "support/filetools.h"
+#include <boost/iterator/indirect_iterator.hpp>
+
+
using lyx::support::LibFileSearch;
using lyx::support::MakeDisplayPath;
using lyx::support::rtrim;
using lyx::support::subst;
+using boost::make_indirect_iterator;
+
using std::endl;
using std::find_if;
using std::remove_if;
@@ -38,14 +43,14 @@ using std::ostream;
namespace {
-class LayoutNamesEqual : public std::unary_function<LyXLayout_ptr, bool> {
+class LayoutNamesEqual : public std::unary_function<LyXLayout, bool> {
public:
LayoutNamesEqual(string const & name)
: name_(name)
{}
- bool operator()(LyXLayout_ptr const & c) const
+ bool operator()(LyXLayout const & ll) const
{
- return c->name() == name_;
+ return ll.name() == name_;
}
private:
string name_;
@@ -788,9 +793,9 @@ bool LyXTextClass::hasLayout(string cons
{
string const name = (n.empty() ? defaultLayoutName() : n);
- return find_if(layoutlist_.begin(), layoutlist_.end(),
- LayoutNamesEqual(name))
- != layoutlist_.end();
+ return find_if(make_indirect_iterator(layoutlist_.begin()),
+ make_indirect_iterator(layoutlist_.end()),
+ LayoutNamesEqual(name)).base() != layoutlist_.end();
}
@@ -799,18 +804,20 @@ LyXLayout_ptr const & LyXTextClass::oper
{
BOOST_ASSERT(!name.empty());
+ LayoutList::const_iterator beg = layoutlist_.begin();
+ LayoutList::const_iterator end = layoutlist_.end();
LayoutList::const_iterator cit =
- find_if(layoutlist_.begin(),
- layoutlist_.end(),
- LayoutNamesEqual(name));
+ find_if(make_indirect_iterator(beg),
+ make_indirect_iterator(end),
+ LayoutNamesEqual(name)).base();
- if (cit == layoutlist_.end()) {
+ if (cit == end) {
lyxerr << "We failed to find the layout '" << name
<< "' in the layout list. You MUST investigate!"
<< endl;
- for (LayoutList::const_iterator it = layoutlist_.begin();
- it != layoutlist_.end(); ++it)
- lyxerr << " " << it->get()->name() << endl;
+ for (LayoutList::const_iterator it = beg;
+ it != end; ++it)
+ lyxerr << " " << (*it)->name() << endl;
// we require the name to exist
BOOST_ASSERT(false);
@@ -826,14 +833,16 @@ bool LyXTextClass::delete_layout(string
if (name == defaultLayoutName())
return false;
- LayoutList::iterator it =
- remove_if(layoutlist_.begin(), layoutlist_.end(),
- LayoutNamesEqual(name));
-
+ LayoutList::iterator beg = layoutlist_.begin();
LayoutList::iterator end = layoutlist_.end();
- bool const ret = (it != end);
- layoutlist_.erase(it, end);
- return ret;
+
+ LayoutList::iterator it =
+ layoutlist_.erase(
+ remove_if(make_indirect_iterator(beg),
+ make_indirect_iterator(end),
+ LayoutNamesEqual(name)).base(),
+ end);
+ return it != end;
}
Index: src/lyxtextclasslist.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtextclasslist.C,v
retrieving revision 1.20
diff -u -p -b -r1.20 lyxtextclasslist.C
--- src/lyxtextclasslist.C 31 Jan 2004 15:30:21 -0000 1.20
+++ src/lyxtextclasslist.C 5 Feb 2004 16:19:49 -0000
@@ -16,18 +16,22 @@
#include "debug.h"
#include "lyxlex.h"
-#include "support/lyxfunctional.h"
#include "support/filetools.h"
+#include <boost/bind.hpp>
+
using lyx::textclass_type;
using lyx::support::LibFileSearch;
using lyx::support::MakeDisplayPath;
+using boost::bind;
+
#ifndef CXX_GLOBAL_CSTD
using std::exit;
#endif
+using std::equal_to;
using std::endl;
using std::find_if;
using std::make_pair;
@@ -42,7 +46,9 @@ LyXTextClassList::NumberOfClass(string c
{
ClassList::const_iterator cit =
find_if(classlist_.begin(), classlist_.end(),
- lyx::compare_memfun(&LyXTextClass::name, textclass));
+ bind(equal_to<string>(),
+ bind(&LyXTextClass::name, _1),
+ textclass));
return cit != classlist_.end() ?
make_pair(true, textclass_type(cit - classlist_.begin())) :
make_pair(false, textclass_type(0));
Index: src/paragraph_pimpl.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph_pimpl.C,v
retrieving revision 1.93
diff -u -p -b -r1.93 paragraph_pimpl.C
--- src/paragraph_pimpl.C 26 Jan 2004 10:13:09 -0000 1.93
+++ src/paragraph_pimpl.C 5 Feb 2004 16:19:50 -0000
@@ -26,11 +26,17 @@
#include "outputparams.h"
#include "texrow.h"
+#include <boost/bind.hpp>
+#include <boost/iterator/transform_iterator.hpp>
using lyx::pos_type;
+using boost::bind;
+using boost::make_transform_iterator;
+
using std::endl;
using std::upper_bound;
+using std::less;
using std::lower_bound;
using std::string;
using std::ostream;
@@ -275,11 +281,23 @@ void Paragraph::Pimpl::insertChar(pos_ty
// Update the font table.
FontTable search_font(pos, LyXFont());
- for (FontList::iterator it = lower_bound(fontlist.begin(),
+#if 1
+ FontList::iterator it =
+ lower_bound(fontlist.begin(),
fontlist.end(),
- search_font, matchFT());
- it != fontlist.end(); ++it)
- {
+ search_font,
+ bind(less<pos_type>(),
+ bind(&FontTable::pos, _1),
+ bind(&FontTable::pos, _2)));
+#else
+ FontList::iterator it = lower_bound(
+ make_transform_iterator(fontlist.begin(),
+ bind(&FontTable::pos, _1)),
+ make_transform_iterator(fontlist.begin(),
+ bind(&FontTable::pos, _1)),
+ pos);
+#endif
+ for (; it != fontlist.end(); ++it) {
it->pos(it->pos() + 1);
}
@@ -319,10 +337,23 @@ void Paragraph::Pimpl::eraseIntern(pos_t
// Erase entries in the tables.
FontTable search_font(pos, LyXFont());
+#if 1
FontList::iterator it =
lower_bound(fontlist.begin(),
fontlist.end(),
- search_font, matchFT());
+ search_font,
+ bind(less<pos_type>(),
+ bind(&FontTable::pos, _1),
+ bind(&FontTable::pos, _2)));
+#else
+ FontList::iterator it =
+ find_if(fontlist.begin(),
+ fontlist.end(),
+ search_font,
+ bind(less<pos_type>(),
+ bind(&FontTable::pos, _1),
+ bind(&FontTable::pos, _2)));
+#endif
if (it != fontlist.end() && it->pos() == pos &&
(pos == 0 ||
(it != fontlist.begin()
Index: src/paragraph_pimpl.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph_pimpl.h,v
retrieving revision 1.42
diff -u -p -b -r1.42 paragraph_pimpl.h
--- src/paragraph_pimpl.h 26 Jan 2004 10:13:09 -0000 1.42
+++ src/paragraph_pimpl.h 5 Feb 2004 16:19:50 -0000
@@ -122,16 +122,6 @@ struct Paragraph::Pimpl {
///
static ShareContainer<LyXFont> container;
};
- ///
- friend struct matchFT;
- ///
- struct matchFT {
- /// used by lower_bound and upper_bound
- inline
- int operator()(FontTable const & a, FontTable const & b) const {
- return a.pos() < b.pos();
- }
- };
///
typedef std::vector<FontTable> FontList;
Index: src/texrow.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/texrow.C,v
retrieving revision 1.32
diff -u -p -b -r1.32 texrow.C
--- src/texrow.C 8 Sep 2003 00:33:25 -0000 1.32
+++ src/texrow.C 5 Feb 2004 16:19:50 -0000
@@ -15,26 +15,14 @@
#include "texrow.h"
#include "debug.h"
-#include <algorithm>
-
-using std::find_if;
+#include <boost/bind.hpp>
+#include <algorithm>
-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_;
-};
+using boost::bind;
-} // namespace anon
+using std::equal_to;
+using std::find_if;
void TexRow::reset()
@@ -65,7 +53,9 @@ bool TexRow::getIdFromRow(int row, int &
{
RowList::const_iterator cit =
find_if(rowlist.begin(), rowlist.end(),
- same_rownumber(row));
+ bind(equal_to<int>(),
+ bind(&RowList::value_type::rownumber, _1),
+ row));
if (cit != rowlist.end()) {
id = cit->id();
Index: src/text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.530
diff -u -p -b -r1.530 text.C
--- src/text.C 3 Feb 2004 08:56:23 -0000 1.530
+++ src/text.C 5 Feb 2004 16:19:50 -0000
@@ -1409,8 +1409,7 @@ ParagraphList::iterator LyXText::getPar(
BOOST_ASSERT(par >= 0);
BOOST_ASSERT(par < int(paragraphs().size()));
ParagraphList::iterator pit = paragraphs().begin();
- advance(pit, par);
- return pit;
+ return boost::next(pit, par);
}
Index: src/text2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v
retrieving revision 1.539
diff -u -p -b -r1.539 text2.C
Index: src/frontends/controllers/ControlCommandBuffer.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlCommandBuffer.C,v
retrieving revision 1.19
diff -u -p -b -r1.19 ControlCommandBuffer.C
--- src/frontends/controllers/ControlCommandBuffer.C 17 Oct 2003 18:01:12 -0000 1.19
+++ src/frontends/controllers/ControlCommandBuffer.C 5 Feb 2004 16:19:51 -0000
@@ -19,38 +19,34 @@
#include "funcrequest.h"
#include "frontends/LyXView.h"
-#include "support/lyxalgo.h"
#include "support/lstrings.h"
+#include <boost/bind.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+
using bv_funcs::currentState;
using lyx::support::prefixIs;
-using std::back_inserter;
-using std::transform;
+using boost::bind;
+using boost::make_filter_iterator;
+using boost::make_transform_iterator;
+
using std::string;
using std::vector;
-namespace {
-
-struct prefix_p {
- string p;
- prefix_p(string const & s)
- : p(s) {}
- bool operator()(string const & s) const {
- return prefixIs(s, p);
- }
-};
-
-} // end of anon namespace
-
-
ControlCommandBuffer::ControlCommandBuffer(LyXView & lv)
: lv_(lv), history_pos_(history_.end())
{
- transform(lyxaction.func_begin(), lyxaction.func_end(),
- back_inserter(commands_), lyx::firster());
+ typedef LyXAction::func_map::value_type Pair;
+
+ commands_.assign(
+ make_transform_iterator(lyxaction.func_begin(),
+ bind(&Pair::first, _1)),
+ make_transform_iterator(lyxaction.func_end(),
+ bind(&Pair::first, _1)));
}
@@ -83,10 +79,12 @@ string const ControlCommandBuffer::getCu
vector<string> const
ControlCommandBuffer::completions(string const & prefix, string & new_prefix)
{
- vector<string> comp;
-
- lyx::copy_if(commands_.begin(), commands_.end(),
- back_inserter(comp), prefix_p(prefix));
+ vector<string> comp(make_filter_iterator(bind(prefixIs, _1, prefix),
+ commands_.begin(),
+ commands_.end()),
+ make_filter_iterator(bind(prefixIs, _1, prefix),
+ commands_.begin(),
+ commands_.end()));
if (comp.empty()) {
new_prefix = prefix;
@@ -104,9 +102,13 @@ ControlCommandBuffer::completions(string
if (tmp.length() > test.length())
test += tmp[test.length()];
while (test.length() < tmp.length()) {
- vector<string> vtmp;
- lyx::copy_if(comp.begin(), comp.end(),
- back_inserter(vtmp), prefix_p(test));
+ vector<string> vtmp(
+ make_filter_iterator(bind(prefixIs, _1, test),
+ comp.begin(),
+ comp.end()),
+ make_filter_iterator(bind(prefixIs, _1, test),
+ comp.begin(),
+ comp.end()));
if (vtmp.size() != comp.size()) {
test.erase(test.length() - 1);
break;
Index: src/frontends/controllers/ControlExternal.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlExternal.C,v
retrieving revision 1.55
diff -u -p -b -r1.55 ControlExternal.C
--- src/frontends/controllers/ControlExternal.C 28 Jan 2004 16:21:26 -0000 1.55
+++ src/frontends/controllers/ControlExternal.C 5 Feb 2004 16:19:51 -0000
@@ -130,9 +130,7 @@ int ControlExternal::getTemplateNumber(s
external::Template ControlExternal::getTemplate(int i) const
{
external::TemplateManager::Templates::const_iterator i1
- = external::TemplateManager::get().getTemplates().begin();
-
- advance(i1, i);
+ = boost::next(external::TemplateManager::get().getTemplates().begin(), i);
return i1->second;
}
Index: src/frontends/controllers/biblio.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/biblio.C,v
retrieving revision 1.61
diff -u -p -b -r1.61 biblio.C
--- src/frontends/controllers/biblio.C 1 Feb 2004 12:46:11 -0000 1.61
+++ src/frontends/controllers/biblio.C 5 Feb 2004 16:19:51 -0000
@@ -18,6 +18,7 @@
#include "support/lstrings.h"
+#include <boost/bind.hpp>
#include <boost/regex.hpp>
#include <algorithm>
@@ -34,6 +35,9 @@ using lyx::support::subst;
using lyx::support::token;
using lyx::support::trim;
+using boost::bind;
+
+using std::less;
using std::string;
using std::ostringstream;
using std::vector;
@@ -154,19 +158,6 @@ string const getYear(InfoMap const & map
}
-namespace {
-
-// A functor for use with std::sort, leading to case insensitive sorting
-struct compareNoCase: public std::binary_function<string, string, bool>
-{
- bool operator()(string const & s1, string const & s2) const {
- return compare_ascii_no_case(s1, s2) < 0;
- }
-};
-
-} // namespace anon
-
-
vector<string> const getKeys(InfoMap const & map)
{
vector<string> bibkeys;
@@ -176,7 +167,11 @@ vector<string> const getKeys(InfoMap con
bibkeys.push_back(it->first);
}
- std::sort(bibkeys.begin(), bibkeys.end(), compareNoCase());
+ // Do a no-case-sensitive sort
+ std::sort(bibkeys.begin(), bibkeys.end(),
+ bind(less<int>(),
+ bind(compare_ascii_no_case, _1, _2),
+ 0));
return bibkeys;
}
Index: src/frontends/controllers/frnt_lang.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/frnt_lang.C,v
retrieving revision 1.15
diff -u -p -b -r1.15 frnt_lang.C
--- src/frontends/controllers/frnt_lang.C 31 Jan 2004 15:30:23 -0000 1.15
+++ src/frontends/controllers/frnt_lang.C 5 Feb 2004 16:19:51 -0000
@@ -15,27 +15,18 @@
#include "gettext.h"
#include "language.h"
+#include <boost/bind.hpp>
+
#include <algorithm>
+using boost::bind;
+
+using std::less;
using std::string;
using std::vector;
-namespace {
-
-struct Sorter
- : public std::binary_function<frnt::LanguagePair,
- frnt::LanguagePair, bool>
-{
- bool operator()(frnt::LanguagePair const & lhs,
- frnt::LanguagePair const & rhs) const {
- return lhs.first < rhs.first;
- }
-};
-
-} // namespace anon
-
namespace frnt {
vector<LanguagePair> const getLanguageData(bool character_dlg)
@@ -64,7 +55,10 @@ vector<LanguagePair> const getLanguageDa
vector<LanguagePair>::iterator begin = character_dlg ?
langs.begin() + 2 : langs.begin();
- std::sort(begin, langs.end(), Sorter());
+ std::sort(begin, langs.end(),
+ bind(less<string>(),
+ bind(&LanguagePair::first, _1),
+ bind(&LanguagePair::first, _2)));
return langs;
}
Index: src/frontends/controllers/helper_funcs.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/helper_funcs.h,v
retrieving revision 1.23
diff -u -p -b -r1.23 helper_funcs.h
--- src/frontends/controllers/helper_funcs.h 8 Jan 2004 10:59:49 -0000 1.23
+++ src/frontends/controllers/helper_funcs.h 5 Feb 2004 16:19:51 -0000
@@ -13,6 +13,8 @@
#define HELPERFUNCS_H
#include <boost/bind.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+
#include <utility>
#include <vector>
#include <string>
@@ -76,17 +78,16 @@ browseDir(std::string const & pathname,
/// Returns a vector of units that can be used to create a valid LaTeX length.
std::vector<std::string> const getLatexUnits();
-
-/** Functions to extract vectors of the first and second elems from a
- vector<pair<A,B> >
-*/
template<class Pair>
std::vector<typename Pair::first_type> const
getFirst(std::vector<Pair> const & pr)
{
- std::vector<typename Pair::first_type> tmp(pr.size());
- std::transform(pr.begin(), pr.end(), tmp.begin(),
- boost::bind(&Pair::first, _1));
+ std::vector<typename Pair::first_type> tmp(
+ boost::make_transform_iterator(pr.begin(),
+ boost::bind(&Pair::first, _1)),
+ boost::make_transform_iterator(pr.end(),
+ boost::bind(&Pair::first, _1))
+ );
return tmp;
}
@@ -94,9 +95,12 @@ template<class Pair>
std::vector<typename Pair::second_type> const
getSecond(std::vector<Pair> const & pr)
{
- std::vector<typename Pair::second_type> tmp(pr.size());
- std::transform(pr.begin(), pr.end(), tmp.begin(),
- boost::bind(&Pair::second, _1));
+ std::vector<typename Pair::second_type> tmp(
+ boost::make_transform_iterator(pr.begin(),
+ boost::bind(&Pair::second, _1)),
+ boost::make_transform_iterator(pr.end(),
+ boost::bind(&Pair::second, _1))
+ );
return tmp;
}
Index: src/frontends/gnome/Dialogs3.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/gnome/Dialogs3.C,v
retrieving revision 1.2
diff -u -p -b -r1.2 Dialogs3.C
--- src/frontends/gnome/Dialogs3.C 23 Aug 2003 00:16:37 -0000 1.2
+++ src/frontends/gnome/Dialogs3.C 5 Feb 2004 16:19:51 -0000
@@ -49,6 +49,11 @@
#include "gnomeBC.h"
#include "ButtonController.h"
+#include <boost/bind.hpp>
+
+using boost::bind;
+
+using std::equal_to;
typedef ButtonController<OkCancelPolicy, gnomeBC>
OkCancelBC;
@@ -69,23 +74,15 @@ char const * const dialognames[] = { "bi
char const * const * const end_dialognames =
dialognames + (sizeof(dialognames) / sizeof(char *));
-struct cmpCStr {
- cmpCStr(char const * name) : name_(name) {}
- bool operator()(char const * other) {
- return strcmp(other, name_) == 0;
- }
-private:
- char const * name_;
-};
-
-
} // namespace anon
bool Dialogs::isValidName(string const & name) const
{
return std::find_if(dialognames, end_dialognames,
- cmpCStr(name.c_str())) != end_dialognames;
+ bind(equal_to<string>(),
+ _1,
+ name)) != end_dialognames;
}
Index: src/frontends/gtk/Dialogs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/gtk/Dialogs.C,v
retrieving revision 1.8
diff -u -p -b -r1.8 Dialogs.C
--- src/frontends/gtk/Dialogs.C 20 Dec 2003 18:47:35 -0000 1.8
+++ src/frontends/gtk/Dialogs.C 5 Feb 2004 16:19:51 -0000
@@ -95,8 +95,13 @@
#include "ams_nrel.xbm"
#include "ams_ops.xbm"
+#include <boost/bind.hpp>
+
#include <vector>
+using boost::bind;
+
+using std::equal_to;
using std::string;
@@ -128,22 +133,15 @@ char const * const dialognames[] = { "ab
char const * const * const end_dialognames =
dialognames + (sizeof(dialognames) / sizeof(char *));
-struct cmpCStr {
- cmpCStr(char const * name) : name_(name) {}
- bool operator()(char const * other) {
- return strcmp(other, name_) == 0;
- }
-private:
- char const * name_;
-};
-
} // namespace anon
bool Dialogs::isValidName(string const & name) const
{
return std::find_if(dialognames, end_dialognames,
- cmpCStr(name.c_str())) != end_dialognames;
+ bind(equal_to<string>(),
+ _1,
+ name)) != end_dialognames;
}
Index: src/frontends/qt2/Dialogs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/Dialogs.C,v
retrieving revision 1.102
diff -u -p -b -r1.102 Dialogs.C
--- src/frontends/qt2/Dialogs.C 26 Jan 2004 00:43:56 -0000 1.102
+++ src/frontends/qt2/Dialogs.C 5 Feb 2004 16:19:51 -0000
@@ -81,6 +81,11 @@
#include "qt_helpers.h"
+#include <boost/bind.hpp>
+
+using boost::bind;
+
+using std::equal_to;
using std::string;
@@ -102,23 +107,15 @@ char const * const dialognames[] = {
char const * const * const end_dialognames =
dialognames + (sizeof(dialognames) / sizeof(char *));
-struct cmpCStr {
- cmpCStr(char const * name) : name_(name) {}
- bool operator()(char const * other) {
- return strcmp(other, name_) == 0;
- }
-private:
- char const * name_;
-};
-
-
} // namespace anon
bool Dialogs::isValidName(string const & name) const
{
return std::find_if(dialognames, end_dialognames,
- cmpCStr(name.c_str())) != end_dialognames;
+ bind(equal_to<string>(),
+ _1,
+ name)) != end_dialognames;
}
Index: src/frontends/qt2/QLImage.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QLImage.C,v
retrieving revision 1.29
diff -u -p -b -r1.29 QLImage.C
--- src/frontends/qt2/QLImage.C 20 Nov 2003 01:22:51 -0000 1.29
+++ src/frontends/qt2/QLImage.C 5 Feb 2004 16:19:51 -0000
@@ -16,17 +16,20 @@
#include "graphics/GraphicsParams.h"
#include "format.h"
#include "support/lstrings.h" // lowercase
-#include "support/lyxfunctional.h" // compare_memfun
#include "qt_helpers.h"
#include <qimage.h>
#include <qpainter.h>
+#include <boost/bind.hpp>
#include <boost/tuple/tuple.hpp>
using lyx::support::lowercase;
+using boost::bind;
+
using std::endl;
+using std::equal_to;
using std::find_if;
using std::string;
@@ -72,7 +75,10 @@ Image::FormatList QLImage::loadableForma
ext = "jpg";
Formats::const_iterator fit =
- find_if(begin, end, lyx::compare_memfun(&Format::extension, ext));
+ find_if(begin, end,
+ bind(equal_to<string>(),
+ bind(&Format::extension, _1),
+ ext));
if (fit != end)
fmts.push_back(fit->name());
}
Index: src/frontends/xforms/Dialogs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/Dialogs.C,v
retrieving revision 1.123
diff -u -p -b -r1.123 Dialogs.C
--- src/frontends/xforms/Dialogs.C 26 Jan 2004 00:43:56 -0000 1.123
+++ src/frontends/xforms/Dialogs.C 5 Feb 2004 16:19:52 -0000
@@ -97,7 +97,11 @@
#include "ams_nrel.xbm"
#include "ams_ops.xbm"
+#include <boost/bind.hpp>
+using boost::bind;
+
+using std::equal_to;
using std::string;
@@ -130,22 +134,15 @@ char const * const dialognames[] = {
char const * const * const end_dialognames =
dialognames + (sizeof(dialognames) / sizeof(char *));
-struct cmpCStr {
- cmpCStr(char const * name) : name_(name) {}
- bool operator()(char const * other) {
- return strcmp(other, name_) == 0;
- }
-private:
- char const * name_;
-};
-
} // namespace anon
bool Dialogs::isValidName(string const & name) const
{
return std::find_if(dialognames, end_dialognames,
- cmpCStr(name.c_str())) != end_dialognames;
+ bind(equal_to<string>(),
+ _1,
+ name)) != end_dialognames;
}
Index: src/frontends/xforms/FormDocument.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormDocument.C,v
retrieving revision 1.165
diff -u -p -b -r1.165 FormDocument.C
--- src/frontends/xforms/FormDocument.C 1 Feb 2004 12:46:12 -0000 1.165
+++ src/frontends/xforms/FormDocument.C 5 Feb 2004 16:19:52 -0000
@@ -70,7 +70,6 @@ bool const scalableTabfolders = false;
bool const scalableTabfolders = true;
#endif
-
} // namespace anon
Index: src/frontends/xforms/FormVSpace.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormVSpace.C,v
retrieving revision 1.7
diff -u -p -b -r1.7 FormVSpace.C
--- src/frontends/xforms/FormVSpace.C 1 Feb 2004 12:46:12 -0000 1.7
+++ src/frontends/xforms/FormVSpace.C 5 Feb 2004 16:19:52 -0000
@@ -42,7 +42,6 @@ using lyx::support::rtrim;
using boost::bind;
using std::remove_if;
-
using std::vector;
using std::string;
Index: src/frontends/xforms/RadioButtonGroup.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/RadioButtonGroup.C,v
retrieving revision 1.30
diff -u -p -b -r1.30 RadioButtonGroup.C
--- src/frontends/xforms/RadioButtonGroup.C 31 Jan 2004 15:30:23 -0000 1.30
+++ src/frontends/xforms/RadioButtonGroup.C 5 Feb 2004 16:19:52 -0000
@@ -17,13 +17,15 @@
#include "debug.h"
-#include "support/lyxfunctional.h"
-
#include "lyx_forms.h"
#include <boost/assert.hpp>
+#include <boost/bind.hpp>
+
+using boost::bind;
using std::endl;
+using std::equal_to;
void RadioButtonGroup::init(FL_OBJECT * ob, size_type value)
@@ -41,8 +43,9 @@ void RadioButtonGroup::set(size_type val
{
ButtonValueMap::const_iterator it =
find_if(map.begin(), map.end(),
- lyx::equal_2nd_in_pair<ButtonValuePair>(value));
-
+ bind(equal_to<size_type>(),
+ bind(&ButtonValueMap::value_type::second, _1),
+ value));
if (it != map.end()) {
fl_set_button(it->first, 1);
} else {
Index: src/frontends/xforms/xformsImage.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/xformsImage.C,v
retrieving revision 1.35
diff -u -p -b -r1.35 xformsImage.C
--- src/frontends/xforms/xformsImage.C 6 Oct 2003 15:42:58 -0000 1.35
+++ src/frontends/xforms/xformsImage.C 5 Feb 2004 16:19:52 -0000
@@ -20,7 +20,6 @@
#include "graphics/GraphicsParams.h"
#include "support/lstrings.h"
-#include "support/lyxfunctional.h" // compare_memfun
#include "support/lyxlib.h"
#include "lyx_forms.h"
@@ -33,6 +32,7 @@
# endif
#endif
+#include <boost/bind.hpp>
#include <boost/tuple/tuple.hpp>
@@ -40,6 +40,9 @@ using lyx::support::float_equal;
using lyx::support::prefixIs;
using lyx::support::rtrim;
+using boost::bind;
+
+using std::equal_to;
using std::find_if;
using std::string;
@@ -103,7 +106,9 @@ Image::FormatList xformsImage::loadableF
Formats::const_iterator it =
find_if(begin, end,
- lyx::compare_memfun(&Format::extension, ext));
+ bind(equal_to<string>(),
+ bind(&Format::extension, _1),
+ ext));
if (it != end)
fmts.push_back(it->name());
}
Index: src/graphics/PreviewLoader.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/graphics/PreviewLoader.C,v
retrieving revision 1.73
diff -u -p -b -r1.73 PreviewLoader.C
--- src/graphics/PreviewLoader.C 31 Jan 2004 15:30:23 -0000 1.73
+++ src/graphics/PreviewLoader.C 5 Feb 2004 16:19:53 -0000
@@ -41,7 +41,10 @@
namespace support = lyx::support;
+using boost::bind;
+
using std::endl;
+using std::equal_to;
using std::find;
using std::fill;
using std::find_if;
@@ -77,18 +80,6 @@ Converter const * setConverter();
void setAscentFractions(vector<double> & ascent_fractions,
string const & metrics_file);
-class FindFirst : public std::unary_function<StrPair, bool> {
-public:
- FindFirst(string const & comp) : comp_(comp) {}
- bool operator()(StrPair const & sp) const
- {
- return sp.first == comp_;
- }
-private:
- string const comp_;
-};
-
-
/// Store info on a currently executing, forked process.
struct InProgress {
///
@@ -354,7 +345,10 @@ public:
BitmapFile const & snippets = process.second.snippets;
BitmapFile::const_iterator beg = snippets.begin();
BitmapFile::const_iterator end = snippets.end();
- return find_if(beg, end, FindFirst(snippet_)) != end;
+ return find_if(beg, end,
+ bind(equal_to<string>(),
+ bind(&StrPair::first, _1),
+ snippet_)) != end;
}
private:
@@ -405,6 +399,9 @@ void PreviewLoader::Impl::add(string con
namespace {
+// Is this really nice? A functor with side effects!
+// should be split into two operations: one to find what to erase,
+// and the other doing the actual erase. (Lgb)
struct EraseSnippet {
EraseSnippet(string const & s) : snippet_(s) {}
void operator()(InProgressProcess & process)
@@ -413,9 +410,12 @@ struct EraseSnippet {
BitmapFile::iterator it = snippets.begin();
BitmapFile::iterator end = snippets.end();
- it = find_if(it, end, FindFirst(snippet_));
+ it = find_if(it, end,
+ bind(equal_to<string>(),
+ bind(&StrPair::first, _1),
+ snippet_));
if (it != end)
- snippets.erase(it, it+1);
+ snippets.erase(it);
}
private:
Index: src/mathed/math_nestinset.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_nestinset.C,v
retrieving revision 1.89
diff -u -p -b -r1.89 math_nestinset.C
Index: src/support/Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/Makefile.am,v
retrieving revision 1.73
diff -u -p -b -r1.73 Makefile.am
--- src/support/Makefile.am 6 Jan 2004 19:32:05 -0000 1.73
+++ src/support/Makefile.am 5 Feb 2004 16:19:53 -0000
@@ -44,7 +44,6 @@ libsupport_la_SOURCES = \
lstrings.C \
lstrings.h \
lyxalgo.h \
- lyxfunctional.h \
lyxlib.h \
lyxmanip.h \
lyxtime.C \
Index: src/support/forkedcontr.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcontr.C,v
retrieving revision 1.17
diff -u -p -b -r1.17 forkedcontr.C
--- src/support/forkedcontr.C 31 Jan 2004 15:30:24 -0000 1.17
+++ src/support/forkedcontr.C 5 Feb 2004 16:19:53 -0000
@@ -16,7 +16,6 @@
#include "forkedcontr.h"
#include "forkedcall.h"
-#include "lyxfunctional.h"
#include "debug.h"
#include "frontends/Timeout.h"
@@ -32,6 +31,7 @@
using boost::bind;
using std::endl;
+using std::equal_to;
using std::find_if;
using std::string;
using std::vector;
@@ -187,7 +187,9 @@ string const ForkedcallsController::getC
{
ListType::const_iterator it =
find_if(forkedCalls.begin(), forkedCalls.end(),
- lyx::compare_memfun(&Forkedcall::pid, pid));
+ bind(equal_to<pid_t>(),
+ bind(&Forkedcall::pid, _1),
+ pid));
if (it == forkedCalls.end())
return string();
@@ -202,7 +204,9 @@ void ForkedcallsController::kill(pid_t p
{
ListType::iterator it =
find_if(forkedCalls.begin(), forkedCalls.end(),
- lyx::compare_memfun(&Forkedcall::pid, pid));
+ bind(equal_to<pid_t>(),
+ bind(&Forkedcall::pid, _1),
+ pid));
if (it == forkedCalls.end())
return;
Index: src/support/lstrings.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/lstrings.C,v
retrieving revision 1.85
diff -u -p -b -r1.85 lstrings.C
--- src/support/lstrings.C 1 Feb 2004 12:46:13 -0000 1.85
+++ src/support/lstrings.C 5 Feb 2004 16:19:53 -0000
@@ -19,6 +19,7 @@
#include <boost/tokenizer.hpp>
#include <boost/assert.hpp>
+#include <boost/bind.hpp>
#include <boost/format.hpp>
#include <algorithm>
@@ -26,6 +27,8 @@
#include <cctype>
#include <cstdlib>
+using boost::bind;
+
using std::transform;
using std::string;
using std::vector;
@@ -236,39 +239,37 @@ char uppercase(char c)
namespace {
// since we cannot use std::tolower and std::toupper directly in the
-// calls to std::transform yet, we use these helper clases. (Lgb)
+// calls to std::transform yet, we use these helper funcs. (Lgb)
+// (I'd like to see a nice explanation why this is. (Lgb))
-struct local_lowercase {
- char operator()(char c) const {
+inline
+char my_tolower(char c)
+{
return tolower(c);
- }
-};
+}
-struct local_uppercase {
- char operator()(char c) const {
- return toupper(c);
- }
-};
-struct local_ascii_lowercase {
- char operator()(char c) const {
- return ascii_tolower(c);
- }
-};
+inline
+char my_toupper(char c)
+{
+ return toupper(c);
+}
} // end of anon namespace
string const lowercase(string const & a)
{
string tmp(a);
- transform(tmp.begin(), tmp.end(), tmp.begin(), local_lowercase());
+ transform(tmp.begin(), tmp.end(), tmp.begin(),
+ my_tolower);
return tmp;
}
string const uppercase(string const & a)
{
string tmp(a);
- transform(tmp.begin(), tmp.end(), tmp.begin(), local_uppercase());
+ transform(tmp.begin(), tmp.end(), tmp.begin(),
+ my_toupper);
return tmp;
}
@@ -277,7 +278,7 @@ string const ascii_lowercase(string cons
{
string tmp(a);
transform(tmp.begin(), tmp.end(), tmp.begin(),
- local_ascii_lowercase());
+ ascii_tolower);
return tmp;
}
Index: src/support/lyxalgo.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/lyxalgo.h,v
retrieving revision 1.15
diff -u -p -b -r1.15 lyxalgo.h
--- src/support/lyxalgo.h 31 Jan 2004 15:30:24 -0000 1.15
+++ src/support/lyxalgo.h 5 Feb 2004 16:19:53 -0000
@@ -14,7 +14,6 @@
#ifndef LYX_ALGO_H
#define LYX_ALGO_H
-#include <utility>
#include <iterator>
#include <algorithm>
@@ -46,14 +45,6 @@ bool sorted(For first, For last, Cmp cmp
}
return true;
}
-
-
-struct firster {
- template <class P1, class P2>
- P1 operator()(std::pair<P1, P2> const & p) {
- return p.first;
- }
-};
/**
Index: src/support/lyxfunctional.h
===================================================================
RCS file: src/support/lyxfunctional.h
diff -N src/support/lyxfunctional.h
--- src/support/lyxfunctional.h 23 Aug 2003 00:16:57 -0000 1.17
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,215 +0,0 @@
-// -*- C++ -*-
-/**
- * \file lyxfunctional.h
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author Lars Gullik Bj�nnes
- *
- * Full author contact details are available in file CREDITS.
- *
- * \brief Convenient function objects for use with LyX
- *
- * This is currently a small collection of small function objects for use
- * together with std::algorithms.
- */
-
-
-#ifndef LYX_FUNCTIONAL_H
-#define LYX_FUNCTIONAL_H
-
-#include <iterator>
-
-namespace lyx {
-
-template <class Cont, class Type, class MemRet>
-class back_insert_fun_iterator {
-protected:
- Cont * container;
- MemRet(Type::*pmf)();
-public:
- typedef Cont container_type;
- typedef std::output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- back_insert_fun_iterator(Cont & x, MemRet(Type::*p)())
- : container(&x), pmf(p) {}
-
- back_insert_fun_iterator &
- operator=(Type * val) {
- container->push_back((val->*pmf)());
- return *this;
- }
-
- back_insert_fun_iterator &
- operator=(Type & val) {
- container->push_back((val.*pmf)());
- return *this;
- }
-
- back_insert_fun_iterator & operator*() {
- return *this;
- }
- back_insert_fun_iterator & operator++() { // prefix ++
- return *this;
- }
- back_insert_fun_iterator & operator++(int) { // postfix ++
- return *this;
- }
-};
-
-
-template <class Cont, class Type, class MemRet>
-class const_back_insert_fun_iterator {
-protected:
- Cont * container;
- MemRet(Type::*pmf)() const;
-public:
- typedef Cont container_type;
- typedef std::output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- const_back_insert_fun_iterator(Cont & x, MemRet(Type::*p)() const)
- : container(&x), pmf(p) {}
-
- ~const_back_insert_fun_iterator() {}
-
- const_back_insert_fun_iterator &
- operator=(Type const * val) {
- container->push_back((val->*pmf)());
- return *this;
- }
-
- const_back_insert_fun_iterator &
- operator=(Type const & val) {
- container->push_back((val.*pmf)());
- return *this;
- }
-
- const_back_insert_fun_iterator & operator*() {
- return *this;
- }
- const_back_insert_fun_iterator & operator++() { // prefix ++
- return *this;
- }
- const_back_insert_fun_iterator & operator++(int) { // postfix ++
- return *this;
- }
-};
-
-
-template <class Cont, class Type, class MemRet>
-back_insert_fun_iterator<Cont, Type, MemRet>
-back_inserter_fun(Cont & cont, MemRet(Type::*p)())
-{
- return back_insert_fun_iterator<Cont, Type, MemRet>(cont, p);
-}
-
-
-template <class Cont, class Type, class MemRet>
-const_back_insert_fun_iterator<Cont, Type, MemRet>
-back_inserter_fun(Cont & cont, MemRet(Type::*p)() const)
-{
- return const_back_insert_fun_iterator<Cont, Type, MemRet>(cont, p);
-}
-
-
-template <class R, class C, class A>
-class compare_memfun_t {
-public:
- compare_memfun_t(R(C::*p)(), A const & a)
- : pmf(p), arg(a) {}
- bool operator()(C * c) {
- return (c->*pmf)() == arg;
- }
- bool operator()(C & c) {
- return (c.*pmf)() == arg;
- }
-private:
- R(C::*pmf)();
- A const & arg;
-};
-
-
-template <class R, class C, class A>
-class const_compare_memfun_t {
-public:
- const_compare_memfun_t(R(C::*p)() const, A const & a)
- : pmf(p), arg(a) {}
- bool operator()(C const * c) {
- return (c->*pmf)() == arg;
- }
- bool operator()(C const & c) {
- return (c.*pmf)() == arg;
- }
-private:
- R(C::*pmf)() const;
- A const & arg;
-};
-
-
-template <class R, class C, class A>
-compare_memfun_t<R, C, A>
-compare_memfun(R(C::*p)(), A const & a)
-{
- return compare_memfun_t<R, C, A>(p, a);
-}
-
-
-template <class R, class C, class A>
-const_compare_memfun_t<R, C, A>
-compare_memfun(R(C::*p)() const, A const & a)
-{
- return const_compare_memfun_t<R, C, A>(p, a);
-}
-
-
-// Functors used in the template.
-
-///
-template<typename T>
-class equal_1st_in_pair {
-public:
- ///
- typedef typename T::first_type first_type;
- ///
- typedef T pair_type;
- ///
- equal_1st_in_pair(first_type const & value) : value_(value) {}
- ///
- bool operator() (pair_type const & p) const {
- return p.first == value_;
- }
-private:
- ///
- first_type const & value_;
-};
-
-
-///
-template<typename T>
-class equal_2nd_in_pair {
-public:
- ///
- typedef typename T::second_type second_type;
- ///
- typedef T pair_type;
- ///
- equal_2nd_in_pair(second_type const & value) : value_(value) {}
- ///
- bool operator() (pair_type const & p) const {
- return p.second == value_;
- }
-private:
- ///
- second_type const & value_;
-};
-
-} // end of namespace lyx
-#endif
Index: src/support/translator.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/translator.h,v
retrieving revision 1.20
diff -u -p -b -r1.20 translator.h
--- src/support/translator.h 25 Sep 2003 10:49:13 -0000 1.20
+++ src/support/translator.h 5 Feb 2004 16:19:53 -0000
@@ -14,12 +14,13 @@
#include <boost/assert.hpp>
+#include <boost/bind.hpp>
+
#include <vector>
#include <utility>
#include <algorithm>
#include <functional>
-#include "support/lyxfunctional.h"
/**
* This class template is used to translate between two elements, specifically
* it was worked out to translate between an enum and strings when reading
@@ -62,7 +63,9 @@ public:
// For explanation see the next find() function.
typename Map::const_iterator it =
std::find_if(map.begin(), map.end(),
- lyx::equal_1st_in_pair<MapPair>(first)
+ boost::bind(std::equal_to<T1>(),
+ boost::bind(&MapPair::first, _1),
+ first)
);
if (it != map.end()) {
@@ -89,7 +92,9 @@ public:
// equal_to(select2nd(pair) , second)
typename Map::const_iterator it =
std::find_if(map.begin(), map.end(),
- lyx::equal_2nd_in_pair<MapPair>(second)
+ boost::bind(std::equal_to<T2>(),
+ boost::bind(&MapPair::second, _1),
+ second)
);
if (it != map.end())
Index: src/tex2lyx/text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/tex2lyx/text.C,v
retrieving revision 1.33
diff -u -p -b -r1.33 text.C
--- src/tex2lyx/text.C 1 Feb 2004 12:46:14 -0000 1.33
+++ src/tex2lyx/text.C 5 Feb 2004 16:19:53 -0000
@@ -21,6 +21,8 @@
#include "support/tostr.h"
#include "support/filetools.h"
+#include <boost/iterator/indirect_iterator.hpp>
+
#include <iostream>
#include <map>
#include <sstream>
@@ -30,9 +32,10 @@ using lyx::support::rtrim;
using lyx::support::suffixIs;
using lyx::support::contains;
+using boost::make_indirect_iterator;
+
using std::cerr;
using std::endl;
-
using std::map;
using std::ostream;
using std::ostringstream;
@@ -286,11 +289,11 @@ void handle_comment(ostream & os, string
}
-class isLayout : public std::unary_function<LyXLayout_ptr, bool> {
+class isLayout : public std::unary_function<LyXLayout, bool> {
public:
isLayout(string const name) : name_(name) {}
- bool operator()(LyXLayout_ptr const & ptr) const {
- return ptr->latexname() == name_;
+ bool operator()(LyXLayout const & ll) const {
+ return ll.latexname() == name_;
}
private:
string const name_;
@@ -302,9 +305,10 @@ LyXLayout_ptr findLayout(LyXTextClass co
{
LyXTextClass::const_iterator beg = textclass.begin();
LyXTextClass::const_iterator end = textclass.end();
-
LyXTextClass::const_iterator
- it = std::find_if(beg, end, isLayout(name));
+ it = std::find_if(make_indirect_iterator(it),
+ make_indirect_iterator(end),
+ isLayout(name)).base();
return (it == end) ? LyXLayout_ptr() : *it;
}
--
Lgb