Imported Upstream version 16.7.0
[platform/upstream/libzypp.git] / zypp / target / CommitPackageCacheReadAhead.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/target/CommitPackageCacheReadAhead.h
10  *
11 */
12 #ifndef ZYPP_TARGET_COMMITPACKAGECACHEREADAHEAD_H
13 #define ZYPP_TARGET_COMMITPACKAGECACHEREADAHEAD_H
14
15 #include <map>
16
17 #include "zypp/base/Logger.h"
18 #include "zypp/base/Exception.h"
19 #include "zypp/base/DefaultIntegral.h"
20 #include "zypp/Repository.h"
21 #include "zypp/TmpPath.h"
22 #include "zypp/target/CommitPackageCacheImpl.h"
23
24 ///////////////////////////////////////////////////////////////////
25 namespace zypp
26 { /////////////////////////////////////////////////////////////////
27   ///////////////////////////////////////////////////////////////////
28   namespace target
29   { /////////////////////////////////////////////////////////////////
30
31     ///////////////////////////////////////////////////////////////////
32     //
33     //  CLASS NAME : IMediaKey
34     //
35     /** Helper storing a source id and media number. */
36     struct IMediaKey
37     {
38       IMediaKey()
39       {}
40
41       explicit
42       IMediaKey( const PoolItem & obj_r )
43       : _repo( obj_r->repository() )
44       , _mediaNr( obj_r->mediaNr() )
45       {}
46
47       explicit
48       IMediaKey( const ResObject::constPtr & obj_r )
49       : _repo( obj_r->repository() )
50       , _mediaNr( obj_r->mediaNr() )
51       {}
52
53       IMediaKey( const Repository & repo, unsigned mediaNr_r )
54       : _repo( repo )
55       , _mediaNr( mediaNr_r )
56       {}
57
58       bool operator==( const IMediaKey & rhs ) const
59       { return( _repo == rhs._repo && _mediaNr == rhs._mediaNr ); }
60
61       bool operator!=( const IMediaKey & rhs ) const
62       { return ! operator==( rhs ); }
63
64       bool operator<( const IMediaKey & rhs ) const
65       {
66         return( _repo.id() < rhs._repo.id()
67                 || ( _repo.id() == rhs._repo.id()
68                      && _mediaNr < rhs._mediaNr ) );
69       }
70
71       Repository                  _repo;
72       DefaultIntegral<unsigned,0> _mediaNr;
73     };
74     ///////////////////////////////////////////////////////////////////
75
76     std::ostream & operator<<( std::ostream & str, const IMediaKey & obj );
77
78     ///////////////////////////////////////////////////////////////////
79     //
80     //  CLASS NAME : CommitPackageCacheReadAhead
81     //
82     /** */
83     class CommitPackageCacheReadAhead : public CommitPackageCache::Impl
84     {
85     public:
86       CommitPackageCacheReadAhead( const PackageProvider & packageProvider_r );
87
88     public:
89       /** Provide the package. Either from Source or from cache. */
90       virtual ManagedFile get( const PoolItem & citem_r );
91
92     private:
93       /** Return whether \a pi is located on a CD/DVD */
94       bool onInteractiveMedia( const PoolItem & pi ) const;
95
96     private:
97       /** Fill the cache.
98        * Called before changing from one interactive media to another.
99        * Performs the read ahead of packages trying to avoid the necessity
100        * of switching back to the current media later.
101       */
102       void cacheLastInteractive( const PoolItem & citem_r );
103
104       /** cacheLastInteractive helper . */
105       void doCacheLastInteractive( const PoolItem & citem_r );
106
107     private:
108       DefaultIntegral<unsigned,0> _dbgChanges;
109       IMediaKey                   _lastInteractive;
110       //Pathname                    _rootDir;
111     };
112     ///////////////////////////////////////////////////////////////////
113
114     /////////////////////////////////////////////////////////////////
115   } // namespace target
116   ///////////////////////////////////////////////////////////////////
117   /////////////////////////////////////////////////////////////////
118 } // namespace zypp
119 ///////////////////////////////////////////////////////////////////
120 #endif // ZYPP_TARGET_COMMITPACKAGECACHEREADAHEAD_H