X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuildinfo.cpp;h=8ca9af8dd136dca3812f2f8da9f38fc7c4e0e8f0;hb=fefa7d1e8ac40136b690e305ce9594af95c678b8;hp=48b4832bba1139e8209651fa37b97ec5d02a31d9;hpb=7c2db9e2b91da953701be233336c5bfa1f3c4af0;p=builder.git diff --git a/source/buildinfo.cpp b/source/buildinfo.cpp index 48b4832..8ca9af8 100644 --- a/source/buildinfo.cpp +++ b/source/buildinfo.cpp @@ -1,4 +1,3 @@ -#include #include #include #include "buildinfo.h" @@ -8,18 +7,19 @@ using namespace Msp; namespace { -/** Removes any duplicate entries from a list, leaving only the first one. The -order of other elements is preserved. O(nlogn) efficiency. */ +/** Removes any duplicate entries from a vector, leaving only the first one. +The order of other elements is preserved. */ template -void unique(list &l) +void unique(vector &v) { - set seen; - for(auto i=l.begin(); i!=l.end(); ) + vector seen; + for(auto i=v.begin(); i!=v.end(); ) { - if(seen.count(*i)) - l.erase(i++); + auto j = lower_bound(seen, *i); + if(j!=seen.end() && *j==*i) + i = v.erase(i); else - seen.insert(*i++); + seen.insert(j, *i++); } } @@ -39,7 +39,7 @@ BuildInfo::BuildInfo(): BuildInfo::LibraryMode BuildInfo::get_libmode_for(const string &lib) const { - LibModeMap::const_iterator i = libmodes.find(lib); + auto i = libmodes.find(lib); if(i!=libmodes.end()) return i->second; return libmode; @@ -54,7 +54,7 @@ void BuildInfo::update_from(const BuildInfo &bi, UpdateLevel level) for(const auto &kvp: bi.standards) { - StandardMap::iterator j = standards.find(kvp.first); + auto j = standards.find(kvp.first); if(j==standards.end()) standards.insert(kvp); else if(kvp.second.type!=j->second.type || kvp.second.year!=j->second.year)