1 // Tencent is pleased to support the open source community by making RapidJSON available.
3 // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
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
8 // http://opensource.org/licenses/MIT
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.
15 #ifndef RAPIDJSON_INTERNAL_STRFUNC_H_
16 #define RAPIDJSON_INTERNAL_STRFUNC_H_
18 #include "../stream.h"
20 RAPIDJSON_NAMESPACE_BEGIN
23 //! Custom strlen() which works on different character types.
24 /*! \tparam Ch Character type (e.g. char, wchar_t, short)
25 \param s Null-terminated input string.
26 \return Number of characters in the string.
27 \note This has the same semantics as strlen(), the return value is not number of Unicode codepoints.
29 template <typename Ch>
30 inline SizeType StrLen(const Ch* s) {
33 return SizeType(p - s);
36 //! Returns number of code points in a encoded string.
37 template<typename Encoding>
38 bool CountStringCodePoint(const typename Encoding::Ch* s, SizeType length, SizeType* outCount) {
39 GenericStringStream<Encoding> is(s);
40 const typename Encoding::Ch* end = s + length;
42 while (is.src_ < end) {
44 if (!Encoding::Decode(is, &codepoint))
52 } // namespace internal
53 RAPIDJSON_NAMESPACE_END
55 #endif // RAPIDJSON_INTERNAL_STRFUNC_H_