zypp::C_Str Class Reference

Convenience char* constructible from std::string and char*, it maps (char*)0 to an empty string. More...

#include <String.h>

List of all members.

Public Types

typedef std::string::size_type size_type

Public Member Functions

 C_Str ()
 C_Str (char *c_str_r)
 C_Str (const char *c_str_r)
 C_Str (const std::string &str_r)
bool isNull () const
bool empty () const
size_type size () const
 operator const char * () const
const char * c_str () const

Private Attributes

const char *const _val
size_type _sze

Related Functions

(Note that these are not member functions.)

std::ostream & operator<< (std::ostream &str, const C_Str &obj)


Detailed Description

Convenience char* constructible from std::string and char*, it maps (char*)0 to an empty string.

 bool hasPrefix( const std::string & str_r, const std::string & prefix_r )
 { return( ::strncmp( str_r.c_str(), prefix_r.c_str(), prefix_r.size() ) == 0 ); }

Called with a plain char* as argument, the std::string is created form for nothing. The implementation actually does not use the std::string.

Best would be to implement hasPrefix for each combination of char* and std::string arguments:

 bool hasPrefix( const std::string & str_r, const std::string & prefix_r )
 { return( ::strncmp( str_r.c_str(), prefix_r.c_str(), prefix_r.size() ) == 0 ); }

 bool hasPrefix( const std::string & str_r, const char * prefix_r )
 { return( !prefix_r || ::strncmp( str_r.c_str(), prefix_r, ::strlen(prefix_r) ) == 0 ); }

 bool hasPrefix( const char * str_r, const std::string & prefix_r )
 { return( str_r ? ::strncmp( str_r, prefix_r.c_str(), prefix_r.size() ) == 0 : prefix_r.empty() ); }

 bool hasPrefix( const char * str_r, const char * prefix_r )
 { return( str && prefix_r ? ::strncmp( str_r, prefix_r, ::strlen(prefix_r) ) == 0
                           : !((str_r && *str_r) || (prefix_r && *prefix_r)); }

This is where C_Str can help. Constructible from std::string and char*, it reduces the std::string to it's char*. At the same time it converts (char*)0 into an "" string.

 bool hasPrefix( const C_Str & str_r, const C_Str & prefix_r )
 { return( ::strncmp( str_r, prefix_r, prefix_r.size() ) == 0 ); }

Definition at line 67 of file String.h.


Member Typedef Documentation

typedef std::string::size_type zypp::C_Str::size_type

Definition at line 70 of file String.h.


Constructor & Destructor Documentation

zypp::C_Str::C_Str (  )  [inline]

Definition at line 73 of file String.h.

zypp::C_Str::C_Str ( char *  c_str_r  )  [inline]

Definition at line 74 of file String.h.

zypp::C_Str::C_Str ( const char *  c_str_r  )  [inline]

Definition at line 75 of file String.h.

zypp::C_Str::C_Str ( const std::string &  str_r  )  [inline]

Definition at line 76 of file String.h.


Member Function Documentation

bool zypp::C_Str::isNull (  )  const [inline]

Definition at line 79 of file String.h.

References _val.

bool zypp::C_Str::empty (  )  const [inline]

Definition at line 80 of file String.h.

References _val.

Referenced by zypp::str::appendEscaped(), and zypp::sat::LookupAttr::iterator::subFind().

size_type zypp::C_Str::size (  )  const [inline]

zypp::C_Str::operator const char * (  )  const [inline]

Definition at line 88 of file String.h.

References c_str().

const char* zypp::C_Str::c_str (  )  const [inline]


Friends And Related Function Documentation

std::ostream & operator<< ( std::ostream &  str,
const C_Str obj 
) [related]

Stream output

Definition at line 97 of file String.h.

References c_str().


Member Data Documentation

const char* const zypp::C_Str::_val [private]

Definition at line 92 of file String.h.

Referenced by c_str(), empty(), isNull(), and size().

size_type zypp::C_Str::_sze [mutable, private]

Definition at line 93 of file String.h.

Referenced by size().


The documentation for this class was generated from the following file:

doxygen