backup
[platform/upstream/libzypp.git] / zypp / sat / Solvable.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/sat/Solvable.cc
10  *
11 */
12 #include <iostream>
13
14 #include "zypp/base/Logger.h"
15 #include "zypp/base/Gettext.h"
16 #include "zypp/base/Exception.h"
17
18 #include "zypp/sat/detail/PoolImpl.h"
19 #include "zypp/sat/Solvable.h"
20 #include "zypp/sat/Repo.h"
21
22 using std::endl;
23
24 ///////////////////////////////////////////////////////////////////
25 namespace zypp
26 { /////////////////////////////////////////////////////////////////
27   ///////////////////////////////////////////////////////////////////
28   namespace sat
29   { /////////////////////////////////////////////////////////////////
30
31     const PoolId PoolId::noid;
32
33     /******************************************************************
34     **
35     **  FUNCTION NAME : operator<<
36     **  FUNCTION TYPE : std::ostream &
37     */
38     std::ostream & operator<<( std::ostream & str, const PoolId & obj )
39     {
40       return str << ::id2str( detail::PoolMember::myPool().getPool(), obj.get() );
41       return str << "sat::Id(" << obj.get() << ")";
42     }
43
44     /////////////////////////////////////////////////////////////////
45
46     const Solvable Solvable::nosolvable;
47
48     /////////////////////////////////////////////////////////////////
49
50     ::_Solvable * Solvable::get() const
51     { return myPool().getSolvable( _id ); }
52
53     Solvable Solvable::nextInPool() const
54     { return Solvable( myPool().getNextId( _id ) ); }
55
56 #define NO_SOLVABLE_RETURN( VAL ) \
57     ::_Solvable * _solvable( get() ); \
58     if ( ! _solvable ) return VAL
59
60     NameId Solvable::name() const
61     {
62       NO_SOLVABLE_RETURN( NameId::noid );
63       return _solvable->name; }
64
65     EvrId Solvable::evr() const
66     {
67       NO_SOLVABLE_RETURN( EvrId::noid );
68       return _solvable->arch;
69     }
70
71     ArchId Solvable::arch() const
72     {
73       NO_SOLVABLE_RETURN( ArchId::noid );
74       return _solvable->evr;
75     }
76
77     VendorId Solvable::vendor() const
78     {
79       NO_SOLVABLE_RETURN( VendorId::noid );
80       return _solvable->vendor;
81     }
82
83     Repo Solvable::repo() const
84     {
85       NO_SOLVABLE_RETURN( Repo::norepo );
86       return Repo( _solvable->repo );
87     }
88
89     const char * Solvable::string( const PoolId & id_r ) const
90     {
91       NO_SOLVABLE_RETURN( "" );
92       SEC << id_r<< endl;
93       SEC << "   n " << ::id2str( _solvable->repo->pool, id_r.get() ) << endl;
94       SEC << "   e " << ::dep2str( _solvable->repo->pool, id_r.get() )<< endl;
95       SEC << "   a " << ::id2rel( _solvable->repo->pool, id_r.get() )<< endl;
96       SEC << "   v " << ::id2evr( _solvable->repo->pool, id_r.get() )<< endl;
97       return ::id2str( _solvable->repo->pool, id_r.get() );
98     }
99
100
101     /******************************************************************
102     **
103     **  FUNCTION NAME : operator<<
104     **  FUNCTION TYPE : std::ostream &
105     */
106     std::ostream & operator<<( std::ostream & str, const Solvable & obj )
107     {
108       if ( ! obj )
109         return str << "sat::solvable()";
110
111       return str << "sat::solvable(" << obj.id() << "|" << obj.name() << '-' << obj.evr() << '.' << obj.arch() << "){"
112           << obj.repo().name() << "}";
113     }
114
115     /////////////////////////////////////////////////////////////////
116   } // namespace sat
117   ///////////////////////////////////////////////////////////////////
118   /////////////////////////////////////////////////////////////////
119 } // namespace zypp
120 ///////////////////////////////////////////////////////////////////