/* The following code example is taken from the book * "The C++ Standard Library - A Tutorial and Reference" * by Nicolai M. Josuttis, Addison-Wesley, 1999 * * (C) Copyright Nicolai M. Josuttis 1999. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */ #ifndef ICSTRING_HPP #define ICSTRING_HPP #include #include #include /* replace functions of the standard char_traits * so that strings behave in a case-insensitive way */ struct ignorecase_traits : public std::char_traits { // return whether c1 and c2 are equal static bool eq(const char& c1, const char& c2) { return std::toupper(c1)==std::toupper(c2); } // return whether c1 is less than c2 static bool lt(const char& c1, const char& c2) { return std::toupper(c1) icstring; /* define an output operator * because the traits type is different than that for std::ostream */ inline std::ostream& operator << (std::ostream& strm, const icstring& s) { // simply convert the icstring into a normal string return strm << std::string(s.data(),s.length()); } #endif // ICSTRING_HPP