Convert from NULL macro to nullptr.
[shibboleth/cpp-xmltooling.git] / xmltooling / unicode.h
index 06f79ee..327cadc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2009 Internet2
+ *  Copyright 2001-2010 Internet2
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 #include <xmltooling/base.h>
 
+#ifndef HAVE_GOOD_STL
+# include <xmltooling/char_traits.h>
+#endif
+
 #include <string>
 #include <iostream>
 #include <xercesc/util/XMLString.hpp>
 
 namespace xmltooling {
 
-    #ifdef HAVE_GOOD_STL
+#ifdef HAVE_GOOD_STL
         /**
          * An STL string type that supports 16-bit Unicode.
-         * Most compilers support this, but various versions of gcc3 do not.
          */
         typedef std::basic_string<XMLCh> xstring;
-    #endif
+#else
+        /**
+         * An STL string type that supports 16-bit Unicode.
+         */
+        typedef std::basic_string< XMLCh,char_traits<XMLCh> > xstring;
+#endif
 
     /**
      * Transcodes a 16-bit Unicode string into UTF-8.
@@ -67,6 +75,15 @@ namespace xmltooling {
     extern XMLTOOL_API std::ostream& operator<<(std::ostream& ostr, const XMLCh* s);
 
     /**
+     * Writes a Unicode string to an ASCII stream by transcoding to UTF8.
+     *
+     * @param ostr  stream to write to
+     * @param s     string to write
+     * @return      reference to output stream
+     */
+    extern XMLTOOL_API std::ostream& operator<<(std::ostream& ostr, const xstring& s);
+
+    /**
      * A minimal auto_ptr-like class that can copy or transcode a buffer into
      * the local code page and free the result automatically.
      *
@@ -80,7 +97,7 @@ namespace xmltooling {
         /**
          * Default constructor.
          */
-        auto_ptr_char() : m_buf(NULL) {
+        auto_ptr_char() : m_buf(nullptr) {
         }
 
         /**
@@ -121,7 +138,7 @@ namespace xmltooling {
          * @return a null-terminated local code page string
          */
         char* release() {
-            char* temp=m_buf; m_buf=NULL; return temp;
+            char* temp=m_buf; m_buf=nullptr; return temp;
         }
 
     private:
@@ -142,7 +159,7 @@ namespace xmltooling {
         /**
          * Default constructor.
          */
-        auto_ptr_XMLCh() : m_buf(NULL) {
+        auto_ptr_XMLCh() : m_buf(nullptr) {
         }
 
         /**
@@ -183,7 +200,7 @@ namespace xmltooling {
          * @return a null-terminated Unicode string
          */
         XMLCh* release() {
-            XMLCh* temp=m_buf; m_buf=NULL; return temp;
+            XMLCh* temp=m_buf; m_buf=nullptr; return temp;
         }
 
     private:
@@ -230,7 +247,7 @@ namespace xmltooling {
          * @return the wrapped pointer
          */
         T* release() {
-            T* temp=m_ptr; m_ptr=NULL; return temp;
+            T* temp=m_ptr; m_ptr=nullptr; return temp;
         }
     };
 };