git repos / blockattack-game

blame: source/code/Libs/include/cereal/external/rapidjson/internal/strfunc.h

normal view · raw

6c5f2c01 sago007 2017-03-15 17:56 1
// Tencent is pleased to support the open source community by making RapidJSON available.
6c5f2c01 sago007 2017-03-15 17:56 2
// 
6c5f2c01 sago007 2017-03-15 17:56 3
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
6c5f2c01 sago007 2017-03-15 17:56 4
//
6c5f2c01 sago007 2017-03-15 17:56 5
// Licensed under the MIT License (the "License"); you may not use this file except
6c5f2c01 sago007 2017-03-15 17:56 6
// in compliance with the License. You may obtain a copy of the License at
6c5f2c01 sago007 2017-03-15 17:56 7
//
6c5f2c01 sago007 2017-03-15 17:56 8
// http://opensource.org/licenses/MIT
6c5f2c01 sago007 2017-03-15 17:56 9
//
6c5f2c01 sago007 2017-03-15 17:56 10
// Unless required by applicable law or agreed to in writing, software distributed 
6c5f2c01 sago007 2017-03-15 17:56 11
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
6c5f2c01 sago007 2017-03-15 17:56 12
// CONDITIONS OF ANY KIND, either express or implied. See the License for the 
6c5f2c01 sago007 2017-03-15 17:56 13
// specific language governing permissions and limitations under the License.
6c5f2c01 sago007 2017-03-15 17:56 14
6c5f2c01 sago007 2017-03-15 17:56 15
#ifndef CEREAL_RAPIDJSON_INTERNAL_STRFUNC_H_
6c5f2c01 sago007 2017-03-15 17:56 16
#define CEREAL_RAPIDJSON_INTERNAL_STRFUNC_H_
6c5f2c01 sago007 2017-03-15 17:56 17
6c5f2c01 sago007 2017-03-15 17:56 18
#include "../stream.h"
6c5f2c01 sago007 2017-03-15 17:56 19
6c5f2c01 sago007 2017-03-15 17:56 20
CEREAL_RAPIDJSON_NAMESPACE_BEGIN
6c5f2c01 sago007 2017-03-15 17:56 21
namespace internal {
6c5f2c01 sago007 2017-03-15 17:56 22
6c5f2c01 sago007 2017-03-15 17:56 23
//! Custom strlen() which works on different character types.
6c5f2c01 sago007 2017-03-15 17:56 24
/*! \tparam Ch Character type (e.g. char, wchar_t, short)
6c5f2c01 sago007 2017-03-15 17:56 25
    \param s Null-terminated input string.
6c5f2c01 sago007 2017-03-15 17:56 26
    \return Number of characters in the string. 
6c5f2c01 sago007 2017-03-15 17:56 27
    \note This has the same semantics as strlen(), the return value is not number of Unicode codepoints.
6c5f2c01 sago007 2017-03-15 17:56 28
*/
6c5f2c01 sago007 2017-03-15 17:56 29
template <typename Ch>
6c5f2c01 sago007 2017-03-15 17:56 30
inline SizeType StrLen(const Ch* s) {
6c5f2c01 sago007 2017-03-15 17:56 31
    const Ch* p = s;
6c5f2c01 sago007 2017-03-15 17:56 32
    while (*p) ++p;
6c5f2c01 sago007 2017-03-15 17:56 33
    return SizeType(p - s);
6c5f2c01 sago007 2017-03-15 17:56 34
}
6c5f2c01 sago007 2017-03-15 17:56 35
6c5f2c01 sago007 2017-03-15 17:56 36
//! Returns number of code points in a encoded string.
6c5f2c01 sago007 2017-03-15 17:56 37
template<typename Encoding>
6c5f2c01 sago007 2017-03-15 17:56 38
bool CountStringCodePoint(const typename Encoding::Ch* s, SizeType length, SizeType* outCount) {
6c5f2c01 sago007 2017-03-15 17:56 39
    GenericStringStream<Encoding> is(s);
6c5f2c01 sago007 2017-03-15 17:56 40
    const typename Encoding::Ch* end = s + length;
6c5f2c01 sago007 2017-03-15 17:56 41
    SizeType count = 0;
6c5f2c01 sago007 2017-03-15 17:56 42
    while (is.src_ < end) {
6c5f2c01 sago007 2017-03-15 17:56 43
        unsigned codepoint;
6c5f2c01 sago007 2017-03-15 17:56 44
        if (!Encoding::Decode(is, &codepoint))
6c5f2c01 sago007 2017-03-15 17:56 45
            return false;
6c5f2c01 sago007 2017-03-15 17:56 46
        count++;
6c5f2c01 sago007 2017-03-15 17:56 47
    }
6c5f2c01 sago007 2017-03-15 17:56 48
    *outCount = count;
6c5f2c01 sago007 2017-03-15 17:56 49
    return true;
6c5f2c01 sago007 2017-03-15 17:56 50
}
6c5f2c01 sago007 2017-03-15 17:56 51
6c5f2c01 sago007 2017-03-15 17:56 52
} // namespace internal
6c5f2c01 sago007 2017-03-15 17:56 53
CEREAL_RAPIDJSON_NAMESPACE_END
6c5f2c01 sago007 2017-03-15 17:56 54
6c5f2c01 sago007 2017-03-15 17:56 55
#endif // CEREAL_RAPIDJSON_INTERNAL_STRFUNC_H_
1970-01-01 00:00 56