allow target creation without populating the pool
[platform/upstream/libzypp.git] / zypp / zypp_detail / ZYppImpl.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/zypp_detail/ZYppImpl.cc
10  *
11 */
12 #include <iostream>
13 //#include "zypp/base/Logger.h"
14
15 #include "zypp/zypp_detail/ZYppImpl.h"
16
17 using std::endl;
18
19 ///////////////////////////////////////////////////////////////////
20 namespace zypp
21 { /////////////////////////////////////////////////////////////////
22   ///////////////////////////////////////////////////////////////////
23   namespace zypp_detail
24   { /////////////////////////////////////////////////////////////////
25
26     ///////////////////////////////////////////////////////////////////
27     //
28     //  METHOD NAME : ZYppImpl::ZYppImpl
29     //  METHOD TYPE : Constructor
30     //
31     ZYppImpl::ZYppImpl()
32     : _pool()
33     , _sourceFeed( _pool )
34     , _resolver( new Resolver(_pool.accessor()) )
35     {
36     }
37
38     ///////////////////////////////////////////////////////////////////
39     //
40     //  METHOD NAME : ZYppImpl::~ZYppImpl
41     //  METHOD TYPE : Destructor
42     //
43     ZYppImpl::~ZYppImpl()
44     {
45     }
46
47     void ZYppImpl::addResolvables (const ResStore& store, bool installed)
48     {
49         _pool.insert(store.begin(), store.end(), installed);
50     }
51
52     void ZYppImpl::removeResolvables (const ResStore& store)
53     {
54         for (ResStore::iterator it = store.begin(); it != store.end(); it++)
55         {
56             _pool.erase(*it);
57         }
58     }
59
60     Target_Ptr ZYppImpl::target() const
61     {
62       if (! _target)
63         ZYPP_THROW(Exception("Target not initialized."));
64       return _target;
65      }
66
67     void ZYppImpl::initTarget(const Pathname & root, bool commit_only)
68     {
69       if (_target)
70         _target = Target_Ptr();
71       _target = new Target(root);
72       if (!commit_only)
73         addResolvables (_target->resolvables(), true);
74     }
75
76     void ZYppImpl::finishTarget()
77     {
78       if (_target)
79         removeResolvables (_target->resolvables());
80       _target = 0;
81     }
82
83     /******************************************************************
84      **
85      ** FUNCTION NAME : operator<<
86      ** FUNCTION TYPE : std::ostream &
87     */
88     std::ostream & operator<<( std::ostream & str, const ZYppImpl & obj )
89     {
90       return str << "ZYppImpl";
91     }
92
93     /////////////////////////////////////////////////////////////////
94   } // namespace zypp_detail
95   ///////////////////////////////////////////////////////////////////
96   /////////////////////////////////////////////////////////////////
97 } // namespace zypp
98 ///////////////////////////////////////////////////////////////////