Paul J. Lucas has proposed merging lp:~paul-lucas/zorba/pjl-misc into lp:zorba.
Commit message: Added more functionality to utf8_string. (Needed for other branches.) Requested reviews: Paul J. Lucas (paul-lucas) For more details, see: https://code.launchpad.net/~paul-lucas/zorba/pjl-misc/+merge/186402 Added more functionality to utf8_string. (Needed for other branches.) -- https://code.launchpad.net/~paul-lucas/zorba/pjl-misc/+merge/186402 Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/util/utf8_string.h' --- src/util/utf8_string.h 2013-04-01 21:01:28 +0000 +++ src/util/utf8_string.h 2013-09-18 17:42:32 +0000 @@ -230,6 +230,30 @@ ////////// constructors & destructor //////////////////////////////////////// /** + * Default contructor wrapped around no string. To wrap around a string at + * a later time, use wrap(). + */ + utf8_string() : s_( nullptr ), delete_( false ) { + } + + /** + * Copy constructor. + * + * @param s The %utf8_string to copy from. If \a s does not have ownership + * of its wrapped string, then this %utf8_string shall wrap the same string; + * if \a s does have ownership, then the wrapped string is duplicated. + */ + utf8_string( utf8_string const &s ) { + if ( &s != this && s.s_ ) { + delete_ = s.delete_; + s_ = delete_ ? new StringType( *s.s_ ) : s.s_; + } else { + s_ = nullptr; + delete_ = false; + } + } + + /** * Constructs a %utf8_string around the given string. * * @param s The string to wrap. Ownership is not taken. @@ -253,7 +277,7 @@ /** * Constructs a %utf8_string around a C string. * - * @param s The C string. + * @param s The C string to wrap. Ownership is taken. */ explicit utf8_string( const_storage_pointer s ) : s_( new StringType( s ) ), delete_( true ) @@ -264,7 +288,7 @@ /** * Constructs a %utf8_string around a C string. * - * @param s The C string. + * @param s The C string wrap. Ownership is taken. */ explicit utf8_string( storage_pointer s ) : s_( new StringType( s ) ), delete_( true ) @@ -276,8 +300,59 @@ * Destructs this %utf8_string. */ ~utf8_string() { - if ( delete_ ) - delete s_; + free(); + } + + ////////// wrapping ///////////////////////////////////////////////////////// + + /** + * Wraps this %utf8_string around the given string. (Any previously wrapped + * string is unwrapped first.) + * + * @param s The string to wrap. Ownership is not taken. + * @return Returns a reference to this %utf8_string. + */ + utf8_string& wrap( StringType &s ) { + free(); + s_ = &s; + delete_ = false; + return *this; + } + + /** + * Wraps this %utf8_string around the given string. (Any previously wrapped + * string is unwrapped first.) + * + * @param s The string to wrap. Ownership is taken. + * @return Returns a reference to this %utf8_string. + */ + utf8_string& wrap( StringType *s ) { + free(); + s_ = s; + delete_ = true; + return *this; + } + + /** + * Wraps this %utf8_string around the given C string. (Any previously + * wrapped string is unwrapped first.) + * + * @param s The C string to wrap. Ownership is taken. + * @return Returns a reference to this %utf8_string. + */ + utf8_string& wrap( const_storage_pointer s ) { + return wrap( new StringType( s ) ); + } + + /** + * Wraps this %utf8_string around the given C string. (Any previously + * wrapped string is unwrapped first.) + * + * @param s The C string to wrap. Ownership is taken. + * @return Returns a reference to this %utf8_string. + */ + utf8_string& wrap( storage_pointer s ) { + return wrap( new StringType( s ) ); } ////////// assignment /////////////////////////////////////////////////////// @@ -1170,6 +1245,14 @@ const_storage_pointer dup( size_type c_n, value_type c ); /** + * Deletes the wrapped string but only if ownership was taken. + */ + void free() { + if ( delete_ ) + delete s_; + } + + /** * A helper class to convert character position information into its * corresponding byte position information. */ @@ -1264,7 +1347,7 @@ }; StringType *s_; - bool const delete_; + bool delete_; }; ////////// inline utf8_string members /////////////////////////////////////////
-- Mailing list: https://launchpad.net/~zorba-coders Post to : zorba-coders@lists.launchpad.net Unsubscribe : https://launchpad.net/~zorba-coders More help : https://help.launchpad.net/ListHelp