/* * 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 &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