forked from facebook/hermes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStringView.cpp
More file actions
40 lines (35 loc) · 1.13 KB
/
StringView.cpp
File metadata and controls
40 lines (35 loc) · 1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "hermes/VM/StringView.h"
namespace hermes {
namespace vm {
UTF16Ref StringView::getUTF16Ref(
llvh::SmallVectorImpl<char16_t> &allocator,
bool alwaysCopy) const {
uint32_t existingLen = allocator.size();
if (isASCII()) {
const char *ptr = castToCharPtr();
allocator.append(ptr, ptr + length());
return UTF16Ref(allocator.data() + existingLen, length());
}
const char16_t *ptr = castToChar16Ptr();
if (alwaysCopy) {
// If alwaysCopy is true, we always copy even it's already UTF16 string.
allocator.append(ptr, ptr + length());
return UTF16Ref(allocator.data() + existingLen, length());
}
return UTF16Ref(ptr, length());
}
llvh::raw_ostream &operator<<(llvh::raw_ostream &os, const StringView &sv) {
if (sv.isASCII()) {
return os << llvh::StringRef(sv.castToCharPtr(), sv.length());
} else {
return os << UTF16Ref(sv.castToChar16Ptr(), sv.length());
}
}
} // namespace vm
} // namespace hermes