Imported Upstream version 16.3.2
[platform/upstream/libzypp.git] / zypp / pool / PoolTraits.h
index ad4163f..816d2e9 100644 (file)
 #define ZYPP_POOL_POOLTRAITS_H
 
 #include <set>
+#include <map>
+#include <list>
+#include <vector>
+
+#include "zypp/base/Iterator.h"
+#include "zypp/base/Hash.h"
 
 #include "zypp/PoolItem.h"
+#include "zypp/pool/ByIdent.h"
+#include "zypp/sat/Pool.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
 { /////////////////////////////////////////////////////////////////
+
+  class PoolQuery;
+
   ///////////////////////////////////////////////////////////////////
   namespace pool
   { /////////////////////////////////////////////////////////////////
 
     class PoolImpl;
 
-    /**  */
-    struct PoolImplInserter
+    /** Pool internal filter skiping invalid/unwanted PoolItems. */
+    struct ByPoolItem
     {
-      void operator()( ResObject::constPtr ptr_r );
-
-      PoolImplInserter( PoolImpl & poolImpl_r )
-      : _poolImpl( poolImpl_r )
-      {}
-      PoolImpl & _poolImpl;
+      bool operator()( const PoolItem & pi ) const
+      { return bool(pi); }
     };
 
-    /**  */
-    struct PoolImplDeleter
+    /** In CXX0X std::_Select2nd does no longer derive from std::unary_function
+     */
+    template<typename TPair>
+    struct P_Select2nd : public std::unary_function<TPair, typename TPair::second_type>
     {
-      void operator()( ResObject::constPtr ptr_r );
+      typename TPair::second_type&
+      operator()(TPair& __x) const
+      { return __x.second; }
 
-      PoolImplDeleter( PoolImpl & poolImpl_r )
-      : _poolImpl( poolImpl_r )
-      {}
-      PoolImpl & _poolImpl;
+      const typename TPair::second_type&
+      operator()(const TPair& __x) const
+      { return __x.second; }
     };
 
     ///////////////////////////////////////////////////////////////////
@@ -55,18 +65,32 @@ namespace zypp
     struct PoolTraits
     {
     public:
-      /** */
-      typedef PoolItem                   Item;
-      typedef std::set<Item>             ContainerT;
-      typedef ContainerT::size_type      size_type;
-      typedef ContainerT::iterator       iterator;
-      typedef ContainerT::const_iterator const_iterator;
+      typedef sat::detail::SolvableIdType              SolvableIdType;
+
+      /** pure items  */
+      typedef std::vector<PoolItem>                    ItemContainerT;
+      typedef ItemContainerT::const_iterator            item_iterator;
+      typedef filter_iterator<ByPoolItem,ItemContainerT::const_iterator>
+                                                       const_iterator;
+      typedef ItemContainerT::size_type                        size_type;
+
+      /** ident index */
+      typedef std::unordered_multimap<sat::detail::IdType, PoolItem>
+                                                        Id2ItemT;
+      typedef P_Select2nd<Id2ItemT::value_type>         Id2ItemValueSelector;
+      typedef transform_iterator<Id2ItemValueSelector, Id2ItemT::const_iterator>
+                                                        byIdent_iterator;
+
+      /** list of known Repositories */
+      typedef sat::Pool::RepositoryIterator            repository_iterator;
+
+      /** hard locks from etc/zypp/locks */
+      typedef std::list<PoolQuery>                     HardLockQueries;
+      typedef HardLockQueries::const_iterator          hardLockQueries_iterator;
 
       typedef PoolImpl                   Impl;
       typedef shared_ptr<PoolImpl>       Impl_Ptr;
       typedef shared_ptr<const PoolImpl> Impl_constPtr;
-      typedef PoolImplInserter           Inserter;
-      typedef PoolImplDeleter            Deleter;
     };
     ///////////////////////////////////////////////////////////////////