yast2-core
Ustring.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | |
3 | __ __ ____ _____ ____ |
4 | \ \ / /_ _/ ___|_ _|___ \ |
5 | \ V / _` \___ \ | | __) | |
6 | | | (_| |___) || | / __/ |
7 | |_|\__,_|____/ |_| |_____| |
8 | |
9 | core system |
10 | (C) SuSE GmbH |
11 \----------------------------------------------------------------------/
12 
13  File: Ustring.h
14 
15  Author: Michael Andres <ma@suse.de>
16  Maintainer: Michael Andres <ma@suse.de>
17 
18 /-*/
19 #ifndef Ustring_h
20 #define Ustring_h
21 
22 #include <iostream>
23 #include <string>
24 // MemUsage.h defines/undefines D_MEMUSAGE
25 #include "y2util/MemUsage.h"
26 #include <set>
27 
29 //
30 // CLASS NAME : UstringHash
39 #ifdef D_MEMUSAGE
40  : public MemUsage
41 #endif
42  {
43 
44  protected:
45 
46  typedef std::set<std::string> UstringHash_type;
47 
49 
50  public:
51 
52  const std::string & add( const std::string & nstr_r )
53  {
54  return *(_UstringHash.insert( nstr_r ).first);
55  }
56 
60  unsigned size() const { return _UstringHash.size(); }
61  unsigned long sum() const {
62  UstringHash_type::const_iterator it = _UstringHash.begin();
63  UstringHash_type::const_iterator e = _UstringHash.end();
64  unsigned long sum = 0;
65  while (it != e)
66  {
67  sum += it->size();
68  it++;
69  }
70  return sum;
71  }
72 #ifdef D_MEMUSAGE
73  virtual size_t mem_size () const { return sizeof (UstringHash); }
74 #endif
75 };
76 
78 
80 //
81 // CLASS NAME : Ustring
124 class Ustring
125 #ifdef D_MEMUSAGE
126  : public MemUsage
127 #endif
128  {
129 
130  private:
131 
136  std::string _name;
137 
138  public:
139 #ifdef D_MEMUSAGE
140  virtual size_t mem_size () const { return sizeof (Ustring); }
141 #endif
142 
146  Ustring( UstringHash & nameHash_r, const std::string & n )
147  :_name( nameHash_r.add( n ) )
148  {}
149 
150  public:
151 
155  const std::string & asString() const { return _name; }
156 
160  operator const std::string & () const { return asString(); }
161 
165  std::string::size_type size() const { return asString().size(); }
166 
170  bool empty() const { return asString().empty(); }
171 
172 
173  int compare( const std::string & rhs ) const {
174  return asString().compare( rhs );
175  }
176 
177  int compare( const Ustring & rhs ) const {
178  if ( *this == rhs )
179  return 0;
180  return( *this < rhs ? -1 : 1 );
181  }
182 
186  const std::string * operator->() const { return & asString(); }
187 
188  // operator ==
189 
190  friend bool operator==( const Ustring & lhs, const Ustring & rhs ) {
191  // Ustrings share their string representation
192  return ( lhs.asString() == rhs.asString() );
193  }
194 
195  friend bool operator==( const Ustring & lhs, const std::string & rhs ) {
196  return ( (const std::string &)lhs == rhs );
197  }
198 
199  friend bool operator==( const std::string & lhs, const Ustring & rhs ) {
200  return ( lhs == (const std::string &)rhs );
201  }
202 
203  // operator !=
204 
205  friend bool operator!=( const Ustring & lhs, const Ustring & rhs ) {
206  return ( ! operator==( lhs, rhs ) );
207  }
208 
209  friend bool operator!=( const Ustring & lhs, const std::string & rhs ) {
210  return ( ! operator==( lhs, rhs ) );
211  }
212 
213  friend bool operator!=( const std::string & lhs, const Ustring & rhs ) {
214  return ( ! operator==( lhs, rhs ) );
215  }
216 
217  // operator <
218 
219  friend bool operator<( const Ustring & lhs, const Ustring & rhs ) {
220  return ( (const std::string &)lhs < (const std::string &)rhs );
221  }
222 
223  friend bool operator<( const Ustring & lhs, const std::string & rhs ) {
224  return ( (const std::string &)lhs < rhs );
225  }
226 
227  friend bool operator<( const std::string & lhs, const Ustring & rhs ) {
228  return ( lhs < (const std::string &)rhs );
229  }
230 
231  // operator >
232 
233  friend bool operator>( const Ustring & lhs, const Ustring & rhs ) {
234  return ( (const std::string &)lhs > (const std::string &)rhs );
235  }
236 
237  friend bool operator>( const Ustring & lhs, const std::string & rhs ) {
238  return ( (const std::string &)lhs > rhs );
239  }
240 
241  friend bool operator>( const std::string & lhs, const Ustring & rhs ) {
242  return ( lhs > (const std::string &)rhs );
243  }
244 
245  // operator >=
246 
247  friend bool operator>=( const Ustring & lhs, const Ustring & rhs ) {
248  return ( ! operator<( lhs, rhs ) );
249  }
250 
251  friend bool operator>=( const Ustring & lhs, const std::string & rhs ) {
252  return ( ! operator<( lhs, rhs ) );
253  }
254 
255  friend bool operator>=( const std::string & lhs, const Ustring & rhs ) {
256  return ( ! operator<( lhs, rhs ) );
257  }
258 
259  // operator <=
260 
261  friend bool operator<=( const Ustring & lhs, const Ustring & rhs ) {
262  return ( ! operator>( lhs, rhs ) );
263  }
264 
265  friend bool operator<=( const Ustring & lhs, const std::string & rhs ) {
266  return ( ! operator>( lhs, rhs ) );
267  }
268 
269  friend bool operator<=( const std::string & lhs, const Ustring & rhs ) {
270  return ( ! operator>( lhs, rhs ) );
271  }
272 
273  // IO
274 
275  friend std::ostream & operator<<( std::ostream & str, const Ustring & obj ) {
276  return str << (const std::string &)obj;
277  }
278 };
279 
280 #endif // Ustring_h
UstringHash_type _UstringHash
Definition: Ustring.h:48
friend bool operator>=(const Ustring &lhs, const Ustring &rhs)
Definition: Ustring.h:247
friend bool operator!=(const std::string &lhs, const Ustring &rhs)
Definition: Ustring.h:213
friend bool operator!=(const Ustring &lhs, const Ustring &rhs)
Definition: Ustring.h:205
int compare(const std::string &rhs) const
Definition: Ustring.h:173
unsigned size() const
Definition: Ustring.h:60
friend bool operator<(const std::string &lhs, const Ustring &rhs)
Definition: Ustring.h:227
std::string::size_type size() const
Definition: Ustring.h:165
#define str
Definition: scanner.cc:997
friend bool operator!=(const Ustring &lhs, const std::string &rhs)
Definition: Ustring.h:209
bool empty() const
Definition: Ustring.h:170
A Hash of unique strings.
Definition: Ustring.h:38
friend bool operator<(const Ustring &lhs, const std::string &rhs)
Definition: Ustring.h:223
Ustring(UstringHash &nameHash_r, const std::string &n)
Definition: Ustring.h:146
friend bool operator>(const Ustring &lhs, const Ustring &rhs)
Definition: Ustring.h:233
friend bool operator==(const Ustring &lhs, const Ustring &rhs)
Definition: Ustring.h:190
friend bool operator<=(const Ustring &lhs, const Ustring &rhs)
Definition: Ustring.h:261
friend bool operator<(const Ustring &lhs, const Ustring &rhs)
Definition: Ustring.h:219
friend bool operator>=(const Ustring &lhs, const std::string &rhs)
Definition: Ustring.h:251
friend bool operator>(const Ustring &lhs, const std::string &rhs)
Definition: Ustring.h:237
friend bool operator>(const std::string &lhs, const Ustring &rhs)
Definition: Ustring.h:241
std::string _name
Definition: Ustring.h:136
friend std::ostream & operator<<(std::ostream &str, const Ustring &obj)
Definition: Ustring.h:275
friend bool operator>=(const std::string &lhs, const Ustring &rhs)
Definition: Ustring.h:255
const std::string & add(const std::string &nstr_r)
Definition: Ustring.h:52
int compare(const Ustring &rhs) const
Definition: Ustring.h:177
friend bool operator<=(const Ustring &lhs, const std::string &rhs)
Definition: Ustring.h:265
std::set< std::string > UstringHash_type
Definition: Ustring.h:46
Unique strings.
Definition: Ustring.h:124
friend bool operator<=(const std::string &lhs, const Ustring &rhs)
Definition: Ustring.h:269
unsigned long sum() const
Definition: Ustring.h:61
const std::string & asString() const
Definition: Ustring.h:155
const std::string * operator->() const
Definition: Ustring.h:186
friend bool operator==(const std::string &lhs, const Ustring &rhs)
Definition: Ustring.h:199
Definition: MemUsage.h:37
friend bool operator==(const Ustring &lhs, const std::string &rhs)
Definition: Ustring.h:195

Generated on a sunny day for yast2-core by doxygen 1.8.6