Some StreamWriter improvements / additions.
Added the following functions: * Flush() to flush the internal StreamWriter buffer to the stream * Tell() gives the current stream position * Seek() seeks to a given offset in the stream * PutString(aiString&) to write an aiString * PutString(std::string&) to write a std::stringpull/1799/head
parent
86645d344f
commit
c4ff978a2f
|
@ -58,7 +58,7 @@ namespace Assimp {
|
||||||
// --------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------
|
||||||
/** Wrapper class around IOStream to allow for consistent writing of binary data in both
|
/** Wrapper class around IOStream to allow for consistent writing of binary data in both
|
||||||
* little and big endian format. Don't attempt to instance the template directly. Use
|
* little and big endian format. Don't attempt to instance the template directly. Use
|
||||||
* StreamWriterLE to read from a little-endian stream and StreamWriterBE to read from a
|
* StreamWriterLE to write to a little-endian stream and StreamWriterBE to write to a
|
||||||
* BE stream. Alternatively, there is StreamWriterAny if the endianness of the output
|
* BE stream. Alternatively, there is StreamWriterAny if the endianness of the output
|
||||||
* stream is to be determined at runtime.
|
* stream is to be determined at runtime.
|
||||||
*/
|
*/
|
||||||
|
@ -108,6 +108,38 @@ public:
|
||||||
stream->Flush();
|
stream->Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
/** Flush the contents of the internal buffer, and the output IOStream */
|
||||||
|
void Flush()
|
||||||
|
{
|
||||||
|
stream->Write(&buffer[0], 1, buffer.size());
|
||||||
|
stream->Flush();
|
||||||
|
buffer.clear();
|
||||||
|
cursor = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
/** Seek to the given offset / origin in the output IOStream.
|
||||||
|
*
|
||||||
|
* Flushes the internal buffer and the output IOStream prior to seeking. */
|
||||||
|
aiReturn Seek(size_t pOffset, aiOrigin pOrigin=aiOrigin_SET)
|
||||||
|
{
|
||||||
|
Flush();
|
||||||
|
return stream->Seek(pOffset, pOrigin);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
/** Tell the current position in the output IOStream.
|
||||||
|
*
|
||||||
|
* First flushes the internal buffer and the output IOStream. */
|
||||||
|
size_t Tell()
|
||||||
|
{
|
||||||
|
Flush();
|
||||||
|
return stream->Tell();
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
@ -171,6 +203,32 @@ public:
|
||||||
Put(n);
|
Put(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
/** Write an aiString to the stream */
|
||||||
|
void PutString(const aiString& s)
|
||||||
|
{
|
||||||
|
// as Put(T f) below
|
||||||
|
if (cursor + s.length >= buffer.size()) {
|
||||||
|
buffer.resize(cursor + s.length);
|
||||||
|
}
|
||||||
|
void* dest = &buffer[cursor];
|
||||||
|
::memcpy(dest, s.C_Str(), s.length);
|
||||||
|
cursor += s.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
/** Write a std::string to the stream */
|
||||||
|
void PutString(const std::string& s)
|
||||||
|
{
|
||||||
|
// as Put(T f) below
|
||||||
|
if (cursor + s.size() >= buffer.size()) {
|
||||||
|
buffer.resize(cursor + s.size());
|
||||||
|
}
|
||||||
|
void* dest = &buffer[cursor];
|
||||||
|
::memcpy(dest, s.c_str(), s.size());
|
||||||
|
cursor += s.size();
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue