Re: Please help with testing & improving a StringValue class
* Alf P. Steinbach:
...
Reusing most of the text I posted for the 01 version:
An 02 version of StringValue is now available at
<url: http://home.no.net/alfps/cpp/lib/alfs_v02.zip>.
Yep, seems like I've partially rediscovered the joy of coding...
Old features:
* A StringValue can be constructed from a literal in constant
time with no dynamic allocation.
* A StringValue can be constructed from a pointer and deletion
operation (functor or function) in constant time, with no O(n)
copying.
* A StringValue can be copied and assigned in constant time with
no dynamic allocation (great for e.g. standard containers).
* A StringValue can be safely constructed in other ways, including
from a 'char const*' and from a 'std::string', but then involving
O(n) copying and dynamic allocation.
* A StringValue can be freely copied and assigned, but the value
can not be modified.
* A license reference (Boost license) is included in every file,
resulting from comments by Roland Pibinger (thanks).
* operator==, operator< added,
resulting from comments by Barry <dhb52@2000.com> (thanks).
* Implicit conversion to 'char const*' /removed/, because
* A class StringValueOrNull was added, which supports passing
null-values around. A StringValue is implicitly convertible to
StringValueOrNull. A StringValueOrNull value can only be explicitly
converted to pure StringValue, then with checking of nullvalue &
possible exception.
* Support for << and >> stream i/o added (because of removal of
implicit conversion to 'char const*').
New features:
* In order to be useful in Windows programming, wchar_t versions of
StringValue (WStringValue) and StringValueOrNull (ditto) have
been added, i.e. templatization on the character type.
* Free function swap implementations moved from namespace std to
namespace alfs, resulting from comments by Greg Herlihy (thanks).
* Two small example usage programs, one an abstraction of the 'main'
arguments (with almost no overhead), and one ditto showing a simple
abstraction of Windows Unicode command line arguments.
Comments, ideas, criticism etc. welcome! Note: almost not tested code.
At least not formally tested!
<< and >> i/o for wide streams not implemented, because wide streams are
not implemented by MingW g++ 3.4.4.
(I'm wondering whether SharedArray should provide indexing, and/or
perhaps keep track of the length of the array: perplexingly and almost
paradoxically, it hasn't been needed. I'm also wondering whether there
is some better way to steer constructor selection (in StringValue and
StringValueOrNull) the Right Way, currently using boost::disable_if?)
Cheers, & hope this can be interesting,
- Alf