filewritestream.h
Engine/source/persistence/rapidjson/filewritestream.h
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
