/* * Copyright 2014 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "wtf/text/StringConcatenate.h" // This macro is helpful for testing how many intermediate Strings are created while evaluating an // expression containing operator+. #ifndef WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING #define WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING() ((void)0) #endif void WTF::StringTypeAdapter::writeTo(LChar* destination) { for (unsigned i = 0; i < m_length; ++i) destination[i] = static_cast(m_buffer[i]); } void WTF::StringTypeAdapter::writeTo(UChar* destination) { for (unsigned i = 0; i < m_length; ++i) { unsigned char c = m_buffer[i]; destination[i] = c; } } WTF::StringTypeAdapter::StringTypeAdapter(LChar* buffer) : m_buffer(buffer) , m_length(strlen(reinterpret_cast(buffer))) { } void WTF::StringTypeAdapter::writeTo(LChar* destination) { memcpy(destination, m_buffer, m_length * sizeof(LChar)); } void WTF::StringTypeAdapter::writeTo(UChar* destination) { StringImpl::copyChars(destination, m_buffer, m_length); } WTF::StringTypeAdapter::StringTypeAdapter(const UChar* buffer) : m_buffer(buffer) { size_t len = 0; while (m_buffer[len] != UChar(0)) ++len; RELEASE_ASSERT(len <= std::numeric_limits::max()); m_length = len; } void WTF::StringTypeAdapter::writeTo(UChar* destination) { memcpy(destination, m_buffer, m_length * sizeof(UChar)); } WTF::StringTypeAdapter::StringTypeAdapter(const char* buffer) : m_buffer(buffer) , m_length(strlen(buffer)) { } void WTF::StringTypeAdapter::writeTo(LChar* destination) { memcpy(destination, m_buffer, static_cast(m_length) * sizeof(LChar)); } void WTF::StringTypeAdapter::writeTo(UChar* destination) { for (unsigned i = 0; i < m_length; ++i) { unsigned char c = m_buffer[i]; destination[i] = c; } } WTF::StringTypeAdapter::StringTypeAdapter(const LChar* buffer) : m_buffer(buffer) , m_length(strlen(reinterpret_cast(buffer))) { } void WTF::StringTypeAdapter::writeTo(LChar* destination) { memcpy(destination, m_buffer, static_cast(m_length) * sizeof(LChar)); } void WTF::StringTypeAdapter::writeTo(UChar* destination) { StringImpl::copyChars(destination, m_buffer, m_length); } void WTF::StringTypeAdapter>::writeTo(LChar* destination) { for (size_t i = 0; i < m_buffer.size(); ++i) destination[i] = static_cast(m_buffer[i]); } void WTF::StringTypeAdapter>::writeTo(UChar* destination) { for (size_t i = 0; i < m_buffer.size(); ++i) destination[i] = static_cast(m_buffer[i]); } void WTF::StringTypeAdapter>::writeTo(LChar* destination) { for (size_t i = 0; i < m_buffer.size(); ++i) destination[i] = m_buffer[i]; } void WTF::StringTypeAdapter>::writeTo(UChar* destination) { for (size_t i = 0; i < m_buffer.size(); ++i) destination[i] = m_buffer[i]; } void WTF::StringTypeAdapter::writeTo(LChar* destination) { unsigned length = m_buffer.length(); ASSERT(is8Bit()); const LChar* data = m_buffer.characters8(); for (unsigned i = 0; i < length; ++i) destination[i] = data[i]; WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING(); } void WTF::StringTypeAdapter::writeTo(UChar* destination) { unsigned length = m_buffer.length(); if (is8Bit()) { const LChar* data = m_buffer.characters8(); for (unsigned i = 0; i < length; ++i) destination[i] = data[i]; } else { const UChar* data = m_buffer.characters16(); for (unsigned i = 0; i < length; ++i) destination[i] = data[i]; } WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING(); }