Case-Insensitive String Class

I suppose it is past time that I post this for you all to test and play with.

It is MIME encoded for space. Decode with
http://www.fourmilab.ch/webtools/base64/

You'll also need tar to uncompress it. Windows users can get it here:
http://gnuwin32.sourceforge.net/packages/libarchive.htm

cistring.hpp.tar.gz.b64
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


Decoding base64 -d cistring.hpp.tar.gz.b64 cistring.hpp.tar.gz tar xzf cistring.hpp.tar.gz

Usage
I keep it in ~/include/duthomhas/cistring.hpp so that I can
1
2
#include "duthomhas/cistring.hpp"
using namespace duthomhas;
Of course, you can put it anywhere else you find convenient. ;-)

Classes uppercase_t <CharType> ( [const std::locale&] ) lowercase_t <CharType> ( [const std::locale&] )
Functor classes that perform locale-sensitive toupper() and tolower(). If no locale is specified, defaults to the current global default. Optimized for char type.

CharType uppercase( CharType [, const std::locale& ] ); CharType lowercase( CharType [, const std::locale& ] ); std::basic_string uppercase( std::basic_string [, const std::locale& ] ); std::basic_string lowercase( std::basic_string [, const std::locale& ] );
Function versions of the above classes to transform individual characters or entire strings. Again, the locale, if unspecified, defaults to the current global locale.

basic_cistring <CharType, TraitsType, AllocType>
The base case-insensitive string class. Looks just like, and is fully compatible with, the std::basic_string class. That is, it can be used anywhere a standard STL string can be used.

cistring wcistring
Convenient types corresponding to std::string and std::wstring. Use them the same way.

Notes
This is not a replacement for the STL string classes. It is meant to be used alongside them.

The char_traits are not modified, only all the comparison functions and operators, so it is fully compatible with everything std::basic_string can do. Notice that this means that it retains case-sensitive storage. Case-insensitivity is only useful for comparisons.

Oh yeah, before I forget, if you haven't any clue what a locale is or how to use it, you can safely ignore it.

Feedback
Bugs? Errors? Suggestions for improvement? Criticisms? All (civil) responses appreciated. :-)
Last edited on
Topic archived. No new replies allowed.