Torque3D Documentation / _generateds / filewritestream.h

filewritestream.h

Engine/source/persistence/rapidjson/filewritestream.h

More...

Classes:

class

Wrapper of C file stream for input using fread().

Namespaces:

namespace

Detailed Description

 1
 2#ifndef RAPIDJSON_FILEWRITESTREAM_H_
 3#define RAPIDJSON_FILEWRITESTREAM_H_
 4
 5#include "rapidjson.h"
 6#include <cstdio>
 7
 8namespace rapidjson {
 9
10//! Wrapper of C file stream for input using fread().
11/*!
12   \implements Stream
13*/
14class FileWriteStream {
15public:
16   typedef char Ch;  //!< Character type. Only support char.
17
18   FileWriteStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) { 
19      RAPIDJSON_ASSERT(fp_ != 0);
20   }
21
22   void Put(char c) { 
23      if (current_ >= bufferEnd_)
24         Flush();
25
26      *current_++ = c;
27   }
28
29   void PutN(char c, size_t n) {
30      size_t avail = bufferEnd_ - current_;
31      while (n > avail) {
32         memset(current_, c, avail);
33         current_ += avail;
34         Flush();
35         n -= avail;
36         avail = bufferEnd_ - current_;
37      }
38
39      if (n > 0) {
40         memset(current_, c, n);
41         current_ += n;
42      }
43   }
44
45   void Flush() {
46      if (current_ != buffer_) {
47         fwrite(buffer_, 1, current_ - buffer_, fp_);
48         current_ = buffer_;
49      }
50   }
51
52   // Not implemented
53   char Peek() const { RAPIDJSON_ASSERT(false); return 0; }
54   char Take() { RAPIDJSON_ASSERT(false); return 0; }
55   size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
56   char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
57   size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; }
58
59private:
60   FILE* fp_;
61   char *buffer_;
62   char *bufferEnd_;
63   char *current_;
64};
65
66//! Implement specialized version of PutN() with memset() for better performance.
67template<>
68inline void PutN(FileWriteStream& stream, char c, size_t n) {
69   stream.PutN(c, n);
70}
71
72} // namespace rapidjson
73
74#endif // RAPIDJSON_FILESTREAM_H_
75