]> git.saurik.com Git - apt.git/commitdiff
cleanup Container.erase API to look more like std::containers
authorDavid Kalnischkies <david@kalnischkies.de>
Wed, 17 Jun 2015 11:30:14 +0000 (13:30 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 10 Aug 2015 15:25:25 +0000 (17:25 +0200)
C++11 slightly changes the API again to const_iterator, but we are find
with iterators in the C++03 style for now as long as they look and
behave equally to the methods of the standard containers.

Git-Dch: Ignore

apt-pkg/cacheiterators.h
apt-pkg/cacheset.h
cmdline/apt-mark.cc

index f3b107699e35c68a20a1f6f975a4fb6b33e88916..d7614374e81dc5230f6839562b8e7cbd6e610b06 100644 (file)
@@ -77,7 +77,6 @@ template<typename Str, typename Itr> class pkgCache::Iterator :
        inline pkgCache *Cache() const {return Owner;}
 
        // Mixed stuff
-       inline void operator =(const Itr &B) {S = B.S; Owner = B.Owner;}
        inline bool IsGood() const { return S && Owner && ! end();}
        inline unsigned long Index() const {return S - OwnerPointer();}
 
index 4fe1eba87c5556f7f263163ebf85ad48d280743c..29f7540cab07a90f18a24da8fc33febb918a5e0f 100644 (file)
@@ -346,13 +346,10 @@ public:                                                                   /*{{{*/
 
        bool empty() const { return _cont.empty(); }
        void clear() { return _cont.clear(); }
-       //FIXME: on ABI break, replace the first with the second without bool
-       void erase(iterator position) { _cont.erase((typename Container::iterator)position); }
-       iterator& erase(iterator &position, bool) { return position = _cont.erase((typename Container::iterator)position); }
-       size_t erase(const pkgCache::PkgIterator x) { return _cont.erase(x); }
-       void erase(iterator first, iterator last) { _cont.erase(first, last); }
        size_t size() const { return _cont.size(); }
-
+       iterator erase( iterator pos ) { return iterator(_cont.erase(pos)); }
+       iterator erase( iterator first, iterator last ) { return iterator(_cont.erase(first, last)); }
+       size_t erase(pkgCache::PkgIterator const & P) { size_t oldsize = size(); _cont.erase(std::remove(_cont.begin(), _cont.end(), P), _cont.end()); return oldsize - size(); }
        const_iterator begin() const { return const_iterator(_cont.begin()); }
        const_iterator end() const { return const_iterator(_cont.end()); }
        iterator begin() { return iterator(_cont.begin()); }
@@ -578,9 +575,9 @@ private:
        void insert(const_iterator, const_iterator) { }
 
        void clear() { }
-       iterator& erase(iterator &iter) { return iter; }
-       size_t erase(const pkgCache::PkgIterator) { return 0; }
-       void erase(iterator, iterator) { }
+       iterator erase( iterator pos );
+       iterator erase( iterator first, iterator last );
+       size_t erase(pkgCache::PkgIterator const & P);
 };
                                                                        /*}}}*/
 typedef PackageContainer<std::set<pkgCache::PkgIterator> > PackageSet;
@@ -780,12 +777,10 @@ public:                                                                   /*{{{*/
        void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); }
        bool empty() const { return _cont.empty(); }
        void clear() { return _cont.clear(); }
-       //FIXME: on ABI break, replace the first with the second without bool
-       void erase(iterator position) { _cont.erase((typename Container::iterator)position); }
-       iterator& erase(iterator &position, bool) { return position = _cont.erase((typename Container::iterator)position); }
-       size_t erase(const pkgCache::VerIterator x) { return _cont.erase(x); }
-       void erase(iterator first, iterator last) { _cont.erase(first, last); }
        size_t size() const { return _cont.size(); }
+       iterator erase( iterator pos ) { return iterator(_cont.erase(pos)); }
+       iterator erase( iterator first, iterator last ) { return iterator(_cont.erase(first, last)); }
+       size_t erase(pkgCache::VerIterator const & V) { size_t oldsize = size(); _cont.erase(std::remove(_cont.begin(), _cont.end(), V), _cont.end()); return oldsize - size(); }
 
        const_iterator begin() const { return const_iterator(_cont.begin()); }
        const_iterator end() const { return const_iterator(_cont.end()); }
@@ -989,6 +984,13 @@ template<> inline void VersionContainer<std::vector<pkgCache::VerIterator> >::in
 }
                                                                        /*}}}*/
 
+template<> inline size_t PackageContainer<std::set<pkgCache::PkgIterator> >::erase(pkgCache::PkgIterator const &P) {
+       return _cont.erase(P);
+}
+template<> inline size_t VersionContainer<std::set<pkgCache::VerIterator> >::erase(pkgCache::VerIterator const &V) {
+       return _cont.erase(V);
+}
+
 template<> template<class Compare> inline bool VersionContainer<std::vector<pkgCache::VerIterator> >::sort(Compare Comp) {
        std::sort(_cont.begin(), _cont.end(), Comp);
        return true;
index de1c80309c8ef50afb284a303a4ff2be3475f152..02c73fc2e4a04a73245ea8db6cf2997bde664f8a 100644 (file)
@@ -238,7 +238,7 @@ static bool DoHold(CommandLine &CmdL)
            ioprintf(c1out,_("%s was already set on hold.\n"), Pkg.FullName(true).c_str());
         else
            ioprintf(c1out,_("%s was already not hold.\n"), Pkg.FullName(true).c_str());
-        Pkg = pkgset.erase(Pkg, true);
+        Pkg = pkgset.erase(Pkg);
       }
       else
         ++Pkg;