47 #ifndef AI_STREAMWRITER_H_INCLUDED
48 #define AI_STREAMWRITER_H_INCLUDED
51 # pragma GCC system_header
54 #include <assimp/ByteSwapper.h>
70 template <
bool SwapEndianess = false,
bool RuntimeSwitch = false>
74 INITIAL_CAPACITY = 1024
96 buffer.reserve(INITIAL_CAPACITY);
101 : stream(std::shared_ptr<
IOStream>(stream))
106 buffer.reserve(INITIAL_CAPACITY);
111 stream->
Write(buffer.data(), 1, buffer.size());
121 stream->
Write(buffer.data(), 1, buffer.size());
134 return stream->
Seek(pOffset, pOrigin);
144 return stream->
Tell();
221 if (cursor + s.
length >= buffer.size()) {
222 buffer.resize(cursor + s.
length);
224 void* dest = &buffer[cursor];
225 ::memcpy(dest, s.C_Str(), s.
length);
234 if (cursor + s.size() >= buffer.size()) {
235 buffer.resize(cursor + s.size());
237 void* dest = &buffer[cursor];
238 ::memcpy(dest, s.c_str(), s.size());
246 template <
typename T>
253 std::size_t GetCurrentPos()
const {
258 void SetCurrentPos(std::size_t new_cursor) {
264 template <
typename T>
266 Intern :: Getter<SwapEndianess,T,RuntimeSwitch>() (&f, le);
268 if (cursor +
sizeof(T) >= buffer.size()) {
269 buffer.resize(cursor +
sizeof(T));
272 void* dest = &buffer[cursor];
277 ::memcpy(dest, &f,
sizeof(T));
283 std::shared_ptr<IOStream> stream;
286 std::vector<uint8_t> buffer;
293 #ifdef AI_BUILD_BIG_ENDIAN
294 typedef StreamWriter<true> StreamWriterLE;
295 typedef StreamWriter<false> StreamWriterBE;
297 typedef StreamWriter<true> StreamWriterBE;
298 typedef StreamWriter<false> StreamWriterLE;
303 typedef StreamWriter<true,true> StreamWriterAny;
307 #endif // !! AI_STREAMWriter_H_INCLUDED
void PutI4(int32_t n)
Definition: StreamWriter.h:176
virtual aiReturn Seek(size_t pOffset, aiOrigin pOrigin)=0
Set the read/write cursor of the file.
aiOrigin
Definition: types.h:426
void PutU4(uint32_t n)
Definition: StreamWriter.h:200
@ aiOrigin_SET
Definition: types.h:428
void PutU1(uint8_t n)
Definition: StreamWriter.h:194
void PutF4(float f)
Definition: StreamWriter.h:151
StreamWriter(std::shared_ptr< IOStream > stream, bool le=false)
Definition: StreamWriter.h:90
virtual size_t Write(const void *pvBuffer, size_t pSize, size_t pCount)=0
Write to the file.
aiReturn
Definition: types.h:397
ai_uint32 length
Definition: types.h:387
void PutString(const aiString &s)
Definition: StreamWriter.h:218
void PutI1(int8_t n)
Definition: StreamWriter.h:170
size_t Tell()
Definition: StreamWriter.h:141
void Put(T f)
Definition: StreamWriter.h:265
void PutI8(int64_t n)
Definition: StreamWriter.h:182
void PutU8(uint64_t n)
Definition: StreamWriter.h:206
void PutU2(uint16_t n)
Definition: StreamWriter.h:188
virtual void Flush()=0
Flush the contents of the file buffer (for writers) See fflush() for more details.
aiReturn Seek(size_t pOffset, aiOrigin pOrigin=aiOrigin_SET)
Definition: StreamWriter.h:131
StreamWriter & operator<<(T f)
Definition: StreamWriter.h:247
void PutF8(double d)
Definition: StreamWriter.h:158
void PutChar(char c)
Definition: StreamWriter.h:212
File I/O wrappers for C++.
void PutI2(int16_t n)
Definition: StreamWriter.h:164
Definition: ai_assert.h:50
virtual size_t Tell() const =0
Get the current position of the read/write cursor.
CPP-API: Class to handle file I/O for C++.
Definition: IOStream.hpp:75
Definition: StreamWriter.h:72
void Flush()
Definition: StreamWriter.h:119
void PutString(const std::string &s)
Definition: StreamWriter.h:231