1 // Tencent is pleased to support the open source community by making RapidJSON available. 2 // 3 // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 // 5 // Licensed under the MIT License (the "License"); you may not use this file except 6 // in compliance with the License. You may obtain a copy of the License at 7 // 8 // http://opensource.org/licenses/MIT 9 // 10 // Unless required by applicable law or agreed to in writing, software distributed 11 // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 // specific language governing permissions and limitations under the License. 14 15 #ifndef RAPIDJSON_OSTREAMWRAPPER_H_ 16 #define RAPIDJSON_OSTREAMWRAPPER_H_ 17 18 #include "stream.h" 19 #include <iosfwd> 20 21 #ifdef __clang__ 22 RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(padded)23RAPIDJSON_DIAG_OFF(padded) 24 #endif 25 26 RAPIDJSON_NAMESPACE_BEGIN 27 28 //! Wrapper of \c std::basic_ostream into RapidJSON's Stream concept. 29 /*! 30 The classes can be wrapped including but not limited to: 31 32 - \c std::ostringstream 33 - \c std::stringstream 34 - \c std::wpstringstream 35 - \c std::wstringstream 36 - \c std::ifstream 37 - \c std::fstream 38 - \c std::wofstream 39 - \c std::wfstream 40 41 \tparam StreamType Class derived from \c std::basic_ostream. 42 */ 43 44 template <typename StreamType> 45 class BasicOStreamWrapper { 46 public: 47 typedef typename StreamType::char_type Ch; 48 BasicOStreamWrapper(StreamType& stream) : stream_(stream) {} 49 50 void Put(Ch c) { 51 stream_.put(c); 52 } 53 54 void Flush() { 55 stream_.flush(); 56 } 57 58 // Not implemented 59 char Peek() const { RAPIDJSON_ASSERT(false); return 0; } 60 char Take() { RAPIDJSON_ASSERT(false); return 0; } 61 size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } 62 char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } 63 size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; } 64 65 private: 66 BasicOStreamWrapper(const BasicOStreamWrapper&); 67 BasicOStreamWrapper& operator=(const BasicOStreamWrapper&); 68 69 StreamType& stream_; 70 }; 71 72 typedef BasicOStreamWrapper<std::ostream> OStreamWrapper; 73 typedef BasicOStreamWrapper<std::wostream> WOStreamWrapper; 74 75 #ifdef __clang__ 76 RAPIDJSON_DIAG_POP 77 #endif 78 79 RAPIDJSON_NAMESPACE_END 80 81 #endif // RAPIDJSON_OSTREAMWRAPPER_H_ 82