Under SVN controll by accident
[platform/upstream/libzypp.git] / zypp / base / StringVal.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/base/StringVal.h
10  *
11 */
12 #ifndef ZYPP_BASE_STRINGVAL_H
13 #define ZYPP_BASE_STRINGVAL_H
14
15 #include <iosfwd>
16 #include <string>
17
18 ///////////////////////////////////////////////////////////////////
19 namespace zypp
20 { /////////////////////////////////////////////////////////////////
21   ///////////////////////////////////////////////////////////////////
22   namespace base
23   { /////////////////////////////////////////////////////////////////
24
25     ///////////////////////////////////////////////////////////////////
26     //
27     //  CLASS NAME : StringVal
28     //
29     /** */
30     class StringVal
31     {
32     public:
33       /** */
34       operator const std::string &() const
35       { return _value; }
36       /** */
37       const std::string & asString() const
38       { return _value; }
39     protected:
40       /** */
41       StringVal();
42       /** */
43       explicit
44       StringVal( const std::string & rhs );
45       /** */
46       StringVal( const StringVal & rhs );
47       /** */
48       ~StringVal();
49       /** */
50       const StringVal & operator=( const std::string & rhs );
51       /** */
52       const StringVal & operator=( const StringVal & rhs );
53     private:
54       std::string _value;
55     };
56     ///////////////////////////////////////////////////////////////////
57
58     inline std::ostream & operator<<( std::ostream & str, const StringVal & obj )
59     { return str << static_cast<const std::string &>(obj); }
60
61     ///////////////////////////////////////////////////////////////////
62
63     inline bool operator==( const StringVal & lhs, const StringVal & rhs )
64     { return lhs.asString() == rhs.asString(); }
65
66     inline bool operator==( const StringVal & lhs, const std::string & rhs )
67     { return lhs.asString() == rhs; }
68
69     inline bool operator==( const std::string & lhs, const StringVal & rhs )
70     { return lhs == rhs.asString(); }
71
72
73     inline bool operator!=( const StringVal & lhs, const StringVal & rhs )
74     { return !( lhs == rhs ); }
75
76     inline bool operator!=( const StringVal & lhs, const std::string & rhs )
77     { return !( lhs == rhs ); }
78
79     inline bool operator!=( const std::string & lhs, const StringVal & rhs )
80     { return !( lhs == rhs ); }
81
82     /////////////////////////////////////////////////////////////////
83   } // namespace base
84   ///////////////////////////////////////////////////////////////////
85   /////////////////////////////////////////////////////////////////
86 } // namespace zypp
87 ///////////////////////////////////////////////////////////////////
88 #endif // ZYPP_BASE_STRINGVAL_H