1545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch/* 2545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) Research In Motion Limited 2010. All rights reserved. 3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) 2009 Google Inc. All rights reserved. 4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * This library is free software; you can redistribute it and/or 6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * modify it under the terms of the GNU Library General Public 7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * License as published by the Free Software Foundation; either 8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * version 2 of the License, or (at your option) any later version. 9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * This library is distributed in the hope that it will be useful, 11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Library General Public License for more details. 14545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 15545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * You should have received a copy of the GNU Library General Public License 16545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 17545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Boston, MA 02110-1301, USA. 19545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch */ 20545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 21545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "config.h" 22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "WebDOMString.h" 23545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 24545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "WebDOMCString.h" 25545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <wtf/text/AtomicString.h> 26545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <wtf/text/CString.h> 27545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <wtf/text/WTFString.h> 28545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass WebDOMStringPrivate : public WTF::StringImpl { 30545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}; 31545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 32545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid WebDOMString::reset() 33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 34545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_private) { 35545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_private->deref(); 36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_private = 0; 37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid WebDOMString::assign(const WebDOMString& other) 41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch assign(const_cast<WebDOMStringPrivate*>(other.m_private)); 43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 44545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 45545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid WebDOMString::assign(const WebUChar* data, size_t length) 46545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 47545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch assign(static_cast<WebDOMStringPrivate*>( 48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WTF::StringImpl::create(data, length).get())); 49545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 50545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 51545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochsize_t WebDOMString::length() const 52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 53545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return m_private ? const_cast<WebDOMStringPrivate*>(m_private)->length() : 0; 54545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochconst WebUChar* WebDOMString::data() const 57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 58545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return m_private ? const_cast<WebDOMStringPrivate*>(m_private)->characters() : 0; 59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 60545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochWebDOMCString WebDOMString::utf8() const 62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 63dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return WTF::String(m_private).utf8(); 64545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 66545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochWebDOMString WebDOMString::fromUTF8(const char* data, size_t length) 67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 68dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return WTF::String::fromUTF8(data, length); 69545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 70545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochWebDOMString WebDOMString::fromUTF8(const char* data) 72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 73dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return WTF::String::fromUTF8(data); 74545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 75545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 76dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebDOMString::WebDOMString(const WTF::String& s) 77545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch : m_private(static_cast<WebDOMStringPrivate*>(s.impl())) 78545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 79545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_private) 80545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_private->ref(); 81545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 82545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 83dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebDOMString& WebDOMString::operator=(const WTF::String& s) 84545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 85545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch assign(static_cast<WebDOMStringPrivate*>(s.impl())); 86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return *this; 87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 88545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 89dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebDOMString::operator WTF::String() const 90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return m_private; 92545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 94dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebDOMString::WebDOMString(const WTF::AtomicString& s) 95545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch : m_private(0) 96545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 97545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch assign(s.string()); 98545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 100dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebDOMString& WebDOMString::operator=(const WTF::AtomicString& s) 101545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 102545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch assign(s.string()); 103545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return *this; 104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 106dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebDOMString::operator WTF::AtomicString() const 107545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 108dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return WTF::AtomicString(static_cast<WTF::StringImpl *>(m_private)); 109545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 111545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochbool WebDOMString::equals(const char* string) const 112545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 113f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return WTF::equal(m_private, string); 114545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 116545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid WebDOMString::assign(WebDOMStringPrivate* p) 117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 118545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // Take care to handle the case where m_private == p 119545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (p) 120545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch p->ref(); 121545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_private) 122545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_private->deref(); 123545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_private = p; 124545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 125