Imported Upstream version 16.3.2
[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 char * str_r, unsigned len_r )
36   : _id( ::pool_strn2id( myPool().getPool(), str_r, len_r, /*create*/true ) )
37   {}
38
39   IdString::IdString( const std::string & str_r )
40   : IdString( str_r.c_str(), str_r.length() )
41   {}
42
43   IdString::IdString( boost::string_ref str_r )
44   : IdString( str_r.data(), str_r.length() )
45   {}
46
47   unsigned IdString::size() const
48   { return ::strlen( c_str() ); }
49
50   const char * IdString::c_str() const
51   { return _id ? ::pool_id2str( myPool().getPool(), _id ) : ""; }
52
53   int IdString::compare( const IdString & rhs ) const
54   {
55     if ( _id == rhs._id )
56       return 0;
57     // Explicitly handle IdString::Null < ""
58     if ( ! _id )
59       return -1;
60     if ( ! rhs._id )
61       return 1;
62     return ::strcmp( c_str(), rhs.c_str() );
63   }
64
65   int IdString::compare( const char * rhs ) const
66   {
67     // Explicitly handle IdString::Null == (const char *)0
68     if ( ! _id )
69       return rhs ? -1 : 0;
70     if ( ! rhs )
71       return _id ? 1 : 0;
72     return ::strcmp( c_str(), rhs );
73   }
74
75   /******************************************************************
76   **
77   **    FUNCTION NAME : operator<<
78   **    FUNCTION TYPE : std::ostream &
79   */
80   std::ostream & operator<<( std::ostream & str, const IdString & obj )
81   {
82     return str << obj.c_str();
83   }
84
85   std::ostream & dumpOn( std::ostream & str, const IdString & obj )
86   {
87     return str << '(' << obj.id() << ')' << obj.c_str();
88   }
89
90   /////////////////////////////////////////////////////////////////
91 } // namespace zypp
92 ///////////////////////////////////////////////////////////////////