On Mon, Oct 22, 2007 at 08:33:16AM +0200, Lars Gullik Bjønnes wrote: > OTOH boost have a pretty good track record in this respect, quite a > few of the boost libraries and boost initiated changes will be in the > next version of the standard.
Speaking of boost and standardization: Index: support/Translator.h =================================================================== --- support/Translator.h (revision 21203) +++ support/Translator.h (working copy) @@ -13,12 +13,9 @@ #define TRANSLATOR_H #include <boost/assert.hpp> -#include <boost/bind.hpp> #include <vector> #include <utility> -#include <algorithm> -#include <functional> namespace lyx { @@ -41,69 +38,50 @@ typedef std::pair<T1, T2> MapPair; /// typedef std::vector<MapPair> Map; + /// + typedef typename Map::const_iterator const_iterator; /// Translator(T1 const & t1, T2 const & t2) : default_t1(t1), default_t2(t2) - {} + {} /// Add a mapping to the translator. - void addPair(T1 const & first, T2 const & second) { + void addPair(T1 const & first, T2 const & second) + { map.push_back(MapPair(first, second)); } + // Add the contents of \c other - void add(Translator const & other) { + void add(Translator const & other) + { if (other.map.empty()) return; map.insert(map.end(), other.map.begin(), other.map.end()); } /// Find the mapping for the first argument - T2 const & find(T1 const & first) const { + T2 const & find(T1 const & first) const + { BOOST_ASSERT(!map.empty()); - - // For explanation see the next find() function. - typename Map::const_iterator it = - std::find_if(map.begin(), map.end(), - ::boost::bind(std::equal_to<T1>(), - ::boost::bind(&MapPair::first, _1), - first) - ); - - if (it != map.end()) { - return it->second; - } else { - return default_t2; - } + const_iterator it = map.begin(); + const_iterator end = map.end(); + for (; it != end; ++it) + if (it->first == first) + return it->second; + return default_t2; } /// Find the mapping for the second argument - T1 const & find(T2 const & second) const { + T1 const & find(T2 const & second) const + { BOOST_ASSERT(!map.empty()); - - // The idea is as follows: - // find_if() will try to compare the data in the vector with - // the value. The vector is made of pairs and the value has - // the type of the second part of the pair. - // We thus give find_if() an equal_to functor and assign to - // its second post the value we want to compare. We now - // compose the equal_to functor with the select2nd functor - // to take only the second value of the pair to be compared. - // - // We can depict it as follows: - // equal_to(select2nd(pair) , second) - typename Map::const_iterator it = - std::find_if(map.begin(), map.end(), - ::boost::bind(std::equal_to<T2>(), - ::boost::bind(&MapPair::second, _1), - second) - ); - - if (it != map.end()) - return it->first; - else { - return default_t1; - } + const_iterator it = map.begin(); + const_iterator end = map.end(); + for (; it != end; ++it) + if (it->second == second) + return it->first; + return default_t1; } private: /// So instead of 12 lines of straightforward code we use of 26 lines of ridiculously complex code that _needs to explained_(!) in 9 more lines. Moreover, this completely unnecessary use of <boost/bind.hpp>, <algorithm> and <functional> adds 172725 lines to a full compilation of LyX. That's exactly the kind of bullshit that's making LyX a bloated mess. And that's exactly the kind of bullshit that gets standardized. Andre' PS: We are down to 20.5 million lines (from 24.6 or so).