memorystream.h (rapidjson-1.0.2) | : | memorystream.h (rapidjson-1.1.0) | ||
---|---|---|---|---|
skipping to change at line 18 | skipping to change at line 18 | |||
// http://opensource.org/licenses/MIT | // http://opensource.org/licenses/MIT | |||
// | // | |||
// Unless required by applicable law or agreed to in writing, software distribut ed | // Unless required by applicable law or agreed to in writing, software distribut ed | |||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR | |||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the | // CONDITIONS OF ANY KIND, either express or implied. See the License for the | |||
// specific language governing permissions and limitations under the License. | // specific language governing permissions and limitations under the License. | |||
#ifndef RAPIDJSON_MEMORYSTREAM_H_ | #ifndef RAPIDJSON_MEMORYSTREAM_H_ | |||
#define RAPIDJSON_MEMORYSTREAM_H_ | #define RAPIDJSON_MEMORYSTREAM_H_ | |||
#include "rapidjson.h" | #include "stream.h" | |||
#ifdef __clang__ | ||||
RAPIDJSON_DIAG_PUSH | ||||
RAPIDJSON_DIAG_OFF(unreachable-code) | ||||
RAPIDJSON_DIAG_OFF(missing-noreturn) | ||||
#endif | ||||
RAPIDJSON_NAMESPACE_BEGIN | RAPIDJSON_NAMESPACE_BEGIN | |||
//! Represents an in-memory input byte stream. | //! Represents an in-memory input byte stream. | |||
/*! | /*! | |||
This class is mainly for being wrapped by EncodedInputStream or AutoUTFInput Stream. | This class is mainly for being wrapped by EncodedInputStream or AutoUTFInput Stream. | |||
It is similar to FileReadBuffer but the source is an in-memory buffer instea d of a file. | It is similar to FileReadBuffer but the source is an in-memory buffer instea d of a file. | |||
Differences between MemoryStream and StringStream: | Differences between MemoryStream and StringStream: | |||
1. StringStream has encoding but MemoryStream is a byte stream. | 1. StringStream has encoding but MemoryStream is a byte stream. | |||
2. MemoryStream needs size of the source buffer and the buffer don't need to be null terminated. StringStream assume null-terminated string as source. | 2. MemoryStream needs size of the source buffer and the buffer don't need to be null terminated. StringStream assume null-terminated string as source. | |||
3. MemoryStream supports Peek4() for encoding detection. StringStream is spe cified with an encoding so it should not have Peek4(). | 3. MemoryStream supports Peek4() for encoding detection. StringStream is spe cified with an encoding so it should not have Peek4(). | |||
\note implements Stream concept | \note implements Stream concept | |||
*/ | */ | |||
struct MemoryStream { | struct MemoryStream { | |||
typedef char Ch; // byte | typedef char Ch; // byte | |||
MemoryStream(const Ch *src, size_t size) : src_(src), begin_(src), end_(src + size), size_(size) {} | MemoryStream(const Ch *src, size_t size) : src_(src), begin_(src), end_(src + size), size_(size) {} | |||
Ch Peek() const { return (src_ == end_) ? '\0' : *src_; } | Ch Peek() const { return RAPIDJSON_UNLIKELY(src_ == end_) ? '\0' : *src_; } | |||
Ch Take() { return (src_ == end_) ? '\0' : *src_++; } | Ch Take() { return RAPIDJSON_UNLIKELY(src_ == end_) ? '\0' : *src_++; } | |||
size_t Tell() const { return static_cast<size_t>(src_ - begin_); } | size_t Tell() const { return static_cast<size_t>(src_ - begin_); } | |||
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } | Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } | |||
void Put(Ch) { RAPIDJSON_ASSERT(false); } | void Put(Ch) { RAPIDJSON_ASSERT(false); } | |||
void Flush() { RAPIDJSON_ASSERT(false); } | void Flush() { RAPIDJSON_ASSERT(false); } | |||
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } | size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } | |||
// For encoding detection only. | // For encoding detection only. | |||
const Ch* Peek4() const { | const Ch* Peek4() const { | |||
return Tell() + 4 <= size_ ? src_ : 0; | return Tell() + 4 <= size_ ? src_ : 0; | |||
} | } | |||
const Ch* src_; //!< Current read position. | const Ch* src_; //!< Current read position. | |||
const Ch* begin_; //!< Original head of the string. | const Ch* begin_; //!< Original head of the string. | |||
const Ch* end_; //!< End of stream. | const Ch* end_; //!< End of stream. | |||
size_t size_; //!< Size of the stream. | size_t size_; //!< Size of the stream. | |||
}; | }; | |||
RAPIDJSON_NAMESPACE_END | RAPIDJSON_NAMESPACE_END | |||
#ifdef __clang__ | ||||
RAPIDJSON_DIAG_POP | ||||
#endif | ||||
#endif // RAPIDJSON_MEMORYBUFFER_H_ | #endif // RAPIDJSON_MEMORYBUFFER_H_ | |||
End of changes. 3 change blocks. | ||||
3 lines changed or deleted | 13 lines changed or added |