Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / IdString.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/sat/IdString.cc
10  *
11 */
12 #include <iostream>
13 #include <boost/mpl/int.hpp>
14
15 #include "zypp/IdString.h"
16
17 #include "zypp/sat/detail/PoolImpl.h"
18 #include "zypp/sat/Pool.h"
19
20 using std::endl;
21
22 ///////////////////////////////////////////////////////////////////
23 namespace zypp
24 { /////////////////////////////////////////////////////////////////
25
26   const IdString IdString::Null ( sat::detail::noId );
27   const IdString IdString::Empty( sat::detail::emptyId );
28
29   /////////////////////////////////////////////////////////////////
30
31   IdString::IdString( const char * str_r )
32   : _id( ::pool_str2id( myPool().getPool(), str_r, /*create*/true ) )
33   {}
34
35   IdString::IdString( const std::string & str_r )
36   : _id( ::pool_str2id( myPool().getPool(), str_r.c_str(), /*create*/true ) )
37   {}
38
39   unsigned IdString::size() const
40   { return ::strlen( c_str() ); }
41
42   const char * IdString::c_str() const
43   { return _id ? ::pool_id2str( myPool().getPool(), _id ) : ""; }
44
45   int IdString::compare( const IdString & rhs ) const
46   {
47     if ( _id == rhs._id )
48       return 0;
49     // Explicitly handle IdString::Null < ""
50     if ( ! _id )
51       return -1;
52     if ( ! rhs._id )
53       return 1;
54     return ::strcmp( c_str(), rhs.c_str() );
55   }
56
57   int IdString::compare( const char * rhs ) const
58   {
59     // Explicitly handle IdString::Null == (const char *)0
60     if ( ! _id )
61       return rhs ? -1 : 0;
62     if ( ! rhs )
63       return _id ? 1 : 0;
64     return ::strcmp( c_str(), rhs );
65   }
66
67   /******************************************************************
68   **
69   **    FUNCTION NAME : operator<<
70   **    FUNCTION TYPE : std::ostream &
71   */
72   std::ostream & operator<<( std::ostream & str, const IdString & obj )
73   {
74     return str << obj.c_str();
75   }
76
77   std::ostream & dumpOn( std::ostream & str, const IdString & obj )
78   {
79     return str << '(' << obj.id() << ')' << obj.c_str();
80   }
81
82   /////////////////////////////////////////////////////////////////
83 } // namespace zypp
84 ///////////////////////////////////////////////////////////////////