diff options
author | Gil <mcg@google.com> | 2018-02-06 09:35:10 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-06 09:35:10 -0800 |
commit | 582e4baf37cdfe23f17d4c6ca8fdd912108cfd29 (patch) | |
tree | f7ab834ed6dfaa83a07398246c649dfe0ed8d567 /Firestore/third_party/abseil-cpp/absl/strings/internal/utf8.cc | |
parent | 28850292d4397562dde0d108fb848b405c689d76 (diff) |
Add StrCat, StrJoin and the rest of //strings from abseil-cpp (#756)
From abseil-cpp version bf7fc9986e20f664958fc227547fd8d2fdcf863e
Diffstat (limited to 'Firestore/third_party/abseil-cpp/absl/strings/internal/utf8.cc')
-rw-r--r-- | Firestore/third_party/abseil-cpp/absl/strings/internal/utf8.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Firestore/third_party/abseil-cpp/absl/strings/internal/utf8.cc b/Firestore/third_party/abseil-cpp/absl/strings/internal/utf8.cc new file mode 100644 index 0000000..2415c2c --- /dev/null +++ b/Firestore/third_party/abseil-cpp/absl/strings/internal/utf8.cc @@ -0,0 +1,51 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. + +// UTF8 utilities, implemented to reduce dependencies. + +#include "absl/strings/internal/utf8.h" + +namespace absl { +namespace strings_internal { + +size_t EncodeUTF8Char(char *buffer, char32_t utf8_char) { + if (utf8_char <= 0x7F) { + *buffer = static_cast<char>(utf8_char); + return 1; + } else if (utf8_char <= 0x7FF) { + buffer[1] = 0x80 | (utf8_char & 0x3F); + utf8_char >>= 6; + buffer[0] = 0xC0 | utf8_char; + return 2; + } else if (utf8_char <= 0xFFFF) { + buffer[2] = 0x80 | (utf8_char & 0x3F); + utf8_char >>= 6; + buffer[1] = 0x80 | (utf8_char & 0x3F); + utf8_char >>= 6; + buffer[0] = 0xE0 | utf8_char; + return 3; + } else { + buffer[3] = 0x80 | (utf8_char & 0x3F); + utf8_char >>= 6; + buffer[2] = 0x80 | (utf8_char & 0x3F); + utf8_char >>= 6; + buffer[1] = 0x80 | (utf8_char & 0x3F); + utf8_char >>= 6; + buffer[0] = 0xF0 | utf8_char; + return 4; + } +} + +} // namespace strings_internal +} // namespace absl |