diff options
author | Riccardo Spagni <ric@spagni.net> | 2015-12-30 12:25:29 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2015-12-30 12:25:29 +0200 |
commit | 32a26332f8ad4b58e697ed360f8a67b64cdd649b (patch) | |
tree | a5d48783316ff837e353c51a29b54f5324dd0bb1 /external/rapidjson/encodedstream.h | |
parent | add missing miniupnpc files, modify cmake to not build miniupnpc tests and to... (diff) | |
download | monero-32a26332f8ad4b58e697ed360f8a67b64cdd649b.tar.xz |
no longer need to pass the size to rapidjson
Diffstat (limited to 'external/rapidjson/encodedstream.h')
-rw-r--r-- | external/rapidjson/encodedstream.h | 94 |
1 files changed, 37 insertions, 57 deletions
diff --git a/external/rapidjson/encodedstream.h b/external/rapidjson/encodedstream.h index 9dc00c7af..e7cdf080d 100644 --- a/external/rapidjson/encodedstream.h +++ b/external/rapidjson/encodedstream.h @@ -1,22 +1,16 @@ -// Copyright (C) 2011 Milo Yip
+// Tencent is pleased to support the open source community by making RapidJSON available.
+//
+// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
+// Licensed under the MIT License (the "License"); you may not use this file except
+// in compliance with the License. You may obtain a copy of the License at
//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
+// http://opensource.org/licenses/MIT
//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
+// Unless required by applicable law or agreed to in writing, software distributed
+// 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
+// specific language governing permissions and limitations under the License.
#ifndef RAPIDJSON_ENCODEDSTREAM_H_
#define RAPIDJSON_ENCODEDSTREAM_H_
@@ -28,7 +22,12 @@ RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(effc++)
#endif
-namespace rapidjson {
+#ifdef __clang__
+RAPIDJSON_DIAG_PUSH
+RAPIDJSON_DIAG_OFF(padded)
+#endif
+
+RAPIDJSON_NAMESPACE_BEGIN
//! Input byte stream wrapper with a statically bound encoding.
/*!
@@ -66,7 +65,7 @@ private: //! Output byte stream wrapper with statically bound encoding.
/*!
\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
- \tparam InputByteStream Type of input byte stream. For example, FileWriteStream.
+ \tparam OutputByteStream Type of input byte stream. For example, FileWriteStream.
*/
template <typename Encoding, typename OutputByteStream>
class EncodedOutputStream {
@@ -83,8 +82,8 @@ public: void Flush() { os_.Flush(); }
// Not implemented
- Ch Peek() const { RAPIDJSON_ASSERT(false); }
- Ch Take() { RAPIDJSON_ASSERT(false); }
+ Ch Peek() const { RAPIDJSON_ASSERT(false); return 0;}
+ Ch Take() { RAPIDJSON_ASSERT(false); return 0;}
size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
@@ -115,6 +114,7 @@ public: \param type UTF encoding type if it is not detected from the stream.
*/
AutoUTFInputStream(InputByteStream& is, UTFType type = kUTF8) : is_(&is), type_(type), hasBOM_(false) {
+ RAPIDJSON_ASSERT(type >= kUTF8 && type <= kUTF32BE);
DetectType();
static const TakeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Take) };
takeFunc_ = f[type_];
@@ -147,11 +147,11 @@ private: // FF FE UTF-16LE
// EF BB BF UTF-8
- const unsigned char* c = (const unsigned char *)is_->Peek4();
+ const unsigned char* c = reinterpret_cast<const unsigned char *>(is_->Peek4());
if (!c)
return;
- unsigned bom = c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24);
+ unsigned bom = static_cast<unsigned>(c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24));
hasBOM_ = false;
if (bom == 0xFFFE0000) { type_ = kUTF32BE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); }
else if (bom == 0x0000FEFF) { type_ = kUTF32LE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); }
@@ -183,21 +183,8 @@ private: }
// Runtime check whether the size of character type is sufficient. It only perform checks with assertion.
- switch (type_) {
- case kUTF8:
- // Do nothing
- break;
- case kUTF16LE:
- case kUTF16BE:
- RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
- break;
- case kUTF32LE:
- case kUTF32BE:
- RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
- break;
- default:
- RAPIDJSON_ASSERT(false); // Invalid type
- }
+ if (type_ == kUTF16LE || type_ == kUTF16BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
+ if (type_ == kUTF32LE || type_ == kUTF32BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
}
typedef Ch (*TakeFunc)(InputByteStream& is);
@@ -211,7 +198,7 @@ private: //! Output stream wrapper with dynamically bound encoding and automatic encoding detection.
/*!
\tparam CharType Type of character for writing.
- \tparam InputByteStream type of output byte stream to be wrapped.
+ \tparam OutputByteStream type of output byte stream to be wrapped.
*/
template <typename CharType, typename OutputByteStream>
class AutoUTFOutputStream {
@@ -226,22 +213,11 @@ public: \param putBOM Whether to write BOM at the beginning of the stream.
*/
AutoUTFOutputStream(OutputByteStream& os, UTFType type, bool putBOM) : os_(&os), type_(type) {
- // RUntime check whether the size of character type is sufficient. It only perform checks with assertion.
- switch (type_) {
- case kUTF16LE:
- case kUTF16BE:
- RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
- break;
- case kUTF32LE:
- case kUTF32BE:
- RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
- break;
- case kUTF8:
- // Do nothing
- break;
- default:
- RAPIDJSON_ASSERT(false); // Invalid UTFType
- }
+ RAPIDJSON_ASSERT(type >= kUTF8 && type <= kUTF32BE);
+
+ // Runtime check whether the size of character type is sufficient. It only perform checks with assertion.
+ if (type_ == kUTF16LE || type_ == kUTF16BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
+ if (type_ == kUTF32LE || type_ == kUTF32BE) RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
static const PutFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Put) };
putFunc_ = f[type_];
@@ -256,8 +232,8 @@ public: void Flush() { os_->Flush(); }
// Not implemented
- Ch Peek() const { RAPIDJSON_ASSERT(false); }
- Ch Take() { RAPIDJSON_ASSERT(false); }
+ Ch Peek() const { RAPIDJSON_ASSERT(false); return 0;}
+ Ch Take() { RAPIDJSON_ASSERT(false); return 0;}
size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
@@ -281,7 +257,11 @@ private: #undef RAPIDJSON_ENCODINGS_FUNC
-} // namespace rapidjson
+RAPIDJSON_NAMESPACE_END
+
+#ifdef __clang__
+RAPIDJSON_DIAG_POP
+#endif
#ifdef __GNUC__
RAPIDJSON_DIAG_POP
|