0026990: Compiler warnings in LDOM_OSStream.hxx
authorabv <abv@opencascade.com>
Sat, 9 Jan 2016 11:41:41 +0000 (14:41 +0300)
committerabv <abv@opencascade.com>
Mon, 11 Jan 2016 22:55:34 +0000 (01:55 +0300)
Signature of methods xsputn() and overflow() of the class LDOM_SBuffer is corrected to correspond to signature of overriden virtual methods of std::streambuf.

src/LDOM/LDOM_OSStream.cxx
src/LDOM/LDOM_OSStream.hxx

index d7d9980..f19741d 100644 (file)
@@ -15,9 +15,9 @@
 
 #include <LDOM_OSStream.hxx>
 #include <NCollection_IncAllocator.hxx>
+#include <Standard_Assert.hxx>
+
 #include <string.h>
-#include <Standard.hxx>
-#include <Standard_Integer.hxx>
 
 //=======================================================================
 //function : LDOM_StringElem()
@@ -92,7 +92,8 @@ Standard_CString LDOM_SBuffer::str () const
 int LDOM_SBuffer::overflow(int c)
 {
   char cc = (char)c;
-  return xsputn(&cc,1);
+  xsputn(&cc,1);
+  return c;
 }
 
 //=======================================================================
@@ -112,10 +113,12 @@ int LDOM_SBuffer::underflow()
 //function : xsputn()
 //purpose  : redefined virtual
 //=======================================================================
-int LDOM_SBuffer::xsputn(const char* aStr, int n)
+std::streamsize LDOM_SBuffer::xsputn (const char* aStr, std::streamsize n)
 {
-  int aLen = n + 1;
-  int freeLen = myMaxBuf - myCurString->len - 1;
+  Standard_ASSERT_RAISE (n < IntegerLast(), "LDOM_SBuffer cannot work with strings greater than 2 Gb");
+
+  Standard_Integer aLen = static_cast<int>(n) + 1;
+  Standard_Integer freeLen = myMaxBuf - myCurString->len - 1;
   if (freeLen >= n)
   {
     strncpy(myCurString->buf + myCurString->len, aStr, aLen);
@@ -142,7 +145,7 @@ int LDOM_SBuffer::xsputn(const char* aStr, int n)
   myCurString->len += aLen - 1;
   *(myCurString->buf + myCurString->len) = '\0';
 
-  myLength += n;
+  myLength += static_cast<int>(n);
   return n;
 }
 
index 4d67a82..2f60c7a 100644 (file)
 #ifndef LDOM_OSStream_HeaderFile
 #define LDOM_OSStream_HeaderFile
 
-//  This implementation allows to increase performance
-//        of outputting data into a string
-//        avoiding reallocation of buffer.
-//  class LDOM_OSStream implements output into a sequence of
-//             strings and getting the result as a string.
-//        It inherits Standard_OStream (ostream).
-//        Beside methods of ostream, it also has additional
-//        useful methods: str(), Length() and Clear().
-//  struct LDOM_StringElem is one element of internal sequence
-//  class LDOM_SBuffer inherits streambuf and
-//             redefines some virtual methods of it
-//             (overflow() and xsputn())
-//        This class contains pointers on first
-//          and current element of sequence,
-//          also it has methods for the sequence management.
-
 #include <NCollection_DefineAlloc.hxx>
 #include <NCollection_BaseAllocator.hxx>
 #include <Standard_OStream.hxx>
 #include <stdlib.h>
 #include <stdio.h> /* EOF */
 
-class LDOM_SBuffer : public streambuf
+//! Class LDOM_SBuffer inherits streambuf and
+//! redefines some virtual methods of it (overflow() and xsputn()).
+//! This class contains pointers on first and current element 
+//! of sequence, also it has methods for the sequence management.
+class LDOM_SBuffer : public std::streambuf
 {
-  // One element of sequence.
-  // Can only be allocated by the allocator and assumes
-  // it is IncAllocator, so destructor isn't required.
+  //! One element of sequence.
+  //! Can only be allocated by the allocator and assumes
+  //! it is IncAllocator, so destructor isn't required.
   struct LDOM_StringElem
   {
     char*            buf;  //!< pointer on data string
@@ -62,32 +50,32 @@ class LDOM_SBuffer : public streambuf
   };
 
 public:
+  //! Constructor. Sets a default value for the
+  //!              length of each sequence element.
   Standard_EXPORT LDOM_SBuffer (const Standard_Integer theMaxBuf);
-  // Constructor. Sets a default value for the
-  //              length of each sequence element.
 
+  //! Concatenates strings of all sequence elements
+  //! into one string. Space for output string is allocated
+  //! with operator new.
+  //! Caller of this function is responsible
+  //! for memory release after the string usage.
   Standard_EXPORT Standard_CString str () const;
-  // Concatenates strings of all sequence elements
-  // into one string. Space for output string is allocated
-  // with operator new.
-  // Caller of this function is responsible
-  // for memory release after the string usage.
 
+  //! Returns full length of data contained
   Standard_Integer Length () const {return myLength;}
-  // Returns full length of data contained
 
+  //! Clears first element of sequence and removes all others
   Standard_EXPORT void Clear ();
-  // Clears first element of sequence and removes all others
 
-    // Methods of streambuf
+  // Methods of streambuf
 
-    Standard_EXPORT virtual int overflow(int c = EOF);
-    Standard_EXPORT virtual int underflow();
-    //virtual int uflow();
+  Standard_EXPORT virtual int overflow(int c = EOF) Standard_OVERRIDE;
+  Standard_EXPORT virtual int underflow() Standard_OVERRIDE;
+  //virtual int uflow();
 
-    Standard_EXPORT virtual int xsputn(const char* s, int n);
-    //virtual int xsgetn(char* s, int n);
-    //virtual int sync();
+  Standard_EXPORT virtual std::streamsize xsputn(const char* s, std::streamsize n) Standard_OVERRIDE;
+  //virtual int xsgetn(char* s, int n);
+  //virtual int sync();
 
   Standard_EXPORT ~LDOM_SBuffer ();
   // Destructor
@@ -101,15 +89,22 @@ private:
   Handle(NCollection_BaseAllocator) myAlloc; //allocator for chunks
 };
 
+//! Subclass if std::ostream allowing to increase performance
+//! of outputting data into a string avoiding reallocation of buffer.
+//! Class LDOM_OSStream implements output into a sequence of
+//! strings and getting the result as a string.
+//! It inherits Standard_OStream (ostream).
+//! Beside methods of ostream, it also has additional
+//! useful methods: str(), Length() and Clear().
 class LDOM_OSStream : public Standard_OStream
 {
- public:
-  Standard_EXPORT LDOM_OSStream (const Standard_Integer theMaxBuf);
-  // Constructor
+public:
+  //! Constructor
+  Standard_EXPORT LDOM_OSStream(const Standard_Integer theMaxBuf);
 
   Standard_CString str () const {return myBuffer.str();}
 
-  Standard_Integer Length () const {return myBuffer.Length();}
+  Standard_Integer Length () const { return myBuffer.Length(); }
 
   void Clear () { myBuffer.Clear(); }