1 /* 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef OHOS_ABILITY_BASE_ZCHAR_WRAPPER_H 16 #define OHOS_ABILITY_BASE_ZCHAR_WRAPPER_H 17 18 #include "base_obj.h" 19 #include "refbase.h" 20 21 namespace OHOS { 22 namespace AAFwk { 23 class Char final : public Object, public IChar { 24 public: Char(zchar value)25 Char(zchar value) : value_(value) 26 {} 27 ~Char()28 ~Char() 29 {} 30 31 IINTERFACE_DECL(); 32 33 ErrCode GetValue(zchar &value) override; /* [out] */ 34 35 bool Equals(IObject &other) override; /* [in] */ 36 37 std::string ToString() override; 38 39 static sptr<IChar> Box(zchar value); /* [in] */ 40 41 static zchar Unbox(IChar *object); /* [in] */ 42 43 static sptr<IChar> Parse(const std::string &str); /* [in] */ 44 45 static int GetByteSize(zchar c); /* [in] */ 46 47 static void WriteUTF8Bytes(char *dst, /* [in] */ 48 zchar c, /* [in] */ 49 int size); /* [in] */ 50 51 static zchar GetChar(const std::string &str, /* [in] */ 52 int index); /* [in] */ 53 54 static constexpr char SIGNATURE = 'C'; 55 56 static constexpr zchar INVALID_CHAR = 0x110000; 57 58 private: 59 static zchar GetCharInternal(const unsigned char *cur, /* [in] */ 60 int &size); /* [in] */ 61 62 static constexpr int MAX_CODE_POINT = 0x10FFFF; 63 static constexpr int MIN_HIGH_SURROGATE = 0xD800; 64 static constexpr int MAX_LOW_SURROGATE = 0xDFFF; 65 66 static constexpr int BYTE_COUNT_1 = 1; 67 static constexpr int BYTE_COUNT_2 = 2; 68 static constexpr int BYTE_COUNT_3 = 3; 69 static constexpr int BYTE_COUNT_4 = 4; 70 71 static constexpr zchar BYTE_MASK = 0x000000BF; 72 static constexpr zchar BYTE_MARK = 0x00000080; 73 static constexpr int BYTE_SHIFT = 6; 74 75 // (00-7f) 7bit -> 0xxxxxxx, bit mask is 0x00000000 76 // (c0-df)(80-bf) 11bit -> 110yyyyx 10xxxxxx, bit mask is 0x000000C0 77 // (e0-ef)(80-bf)(80-bf) 16bit -> 1110yyyy 10yxxxxx 10xxxxxx, bit mask is 0x000000E0 78 // (f0-f7)(80-bf)(80-bf)(80-bf) 21bit -> 11110yyy 10yyxxxx 10xxxxxx 10xxxxxx, bit mask is 0x000000F0 79 static constexpr zchar FIRST_BYTE_MARK[] = {0x00000000, 0x00000000, 0x000000C0, 0x000000E0, 0x000000F0}; 80 81 zchar value_; 82 }; 83 } // namespace AAFwk 84 } // namespace OHOS 85 86 #endif 87