#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()
int LDOM_SBuffer::overflow(int c)
{
char cc = (char)c;
- return xsputn(&cc,1);
+ xsputn(&cc,1);
+ return c;
}
//=======================================================================
//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);
myCurString->len += aLen - 1;
*(myCurString->buf + myCurString->len) = '\0';
- myLength += n;
+ myLength += static_cast<int>(n);
return n;
}
#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
};
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
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(); }