1 /* 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 3 * Copyright (C) 2009 Google Inc. All rights reserved. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Library General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public License 16 * along with this library; see the file COPYING.LIB. If not, write to 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 */ 20 21 #include "config.h" 22 #include "WebDOMString.h" 23 24 #include "WebDOMCString.h" 25 #include <wtf/text/AtomicString.h> 26 #include <wtf/text/CString.h> 27 #include <wtf/text/WTFString.h> 28 29 class WebDOMStringPrivate : public WTF::StringImpl { 30 }; 31 32 void WebDOMString::reset() 33 { 34 if (m_private) { 35 m_private->deref(); 36 m_private = 0; 37 } 38 } 39 40 void WebDOMString::assign(const WebDOMString& other) 41 { 42 assign(const_cast<WebDOMStringPrivate*>(other.m_private)); 43 } 44 45 void WebDOMString::assign(const WebUChar* data, size_t length) 46 { 47 assign(static_cast<WebDOMStringPrivate*>( 48 WTF::StringImpl::create(data, length).get())); 49 } 50 51 size_t WebDOMString::length() const 52 { 53 return m_private ? const_cast<WebDOMStringPrivate*>(m_private)->length() : 0; 54 } 55 56 const WebUChar* WebDOMString::data() const 57 { 58 return m_private ? const_cast<WebDOMStringPrivate*>(m_private)->characters() : 0; 59 } 60 61 WebDOMCString WebDOMString::utf8() const 62 { 63 return WTF::String(m_private).utf8(); 64 } 65 66 WebDOMString WebDOMString::fromUTF8(const char* data, size_t length) 67 { 68 return WTF::String::fromUTF8(data, length); 69 } 70 71 WebDOMString WebDOMString::fromUTF8(const char* data) 72 { 73 return WTF::String::fromUTF8(data); 74 } 75 76 WebDOMString::WebDOMString(const WTF::String& s) 77 : m_private(static_cast<WebDOMStringPrivate*>(s.impl())) 78 { 79 if (m_private) 80 m_private->ref(); 81 } 82 83 WebDOMString& WebDOMString::operator=(const WTF::String& s) 84 { 85 assign(static_cast<WebDOMStringPrivate*>(s.impl())); 86 return *this; 87 } 88 89 WebDOMString::operator WTF::String() const 90 { 91 return m_private; 92 } 93 94 WebDOMString::WebDOMString(const WTF::AtomicString& s) 95 : m_private(0) 96 { 97 assign(s.string()); 98 } 99 100 WebDOMString& WebDOMString::operator=(const WTF::AtomicString& s) 101 { 102 assign(s.string()); 103 return *this; 104 } 105 106 WebDOMString::operator WTF::AtomicString() const 107 { 108 return WTF::AtomicString(static_cast<WTF::StringImpl *>(m_private)); 109 } 110 111 bool WebDOMString::equals(const char* string) const 112 { 113 return WTF::equal(m_private, string); 114 } 115 116 void WebDOMString::assign(WebDOMStringPrivate* p) 117 { 118 // Take care to handle the case where m_private == p 119 if (p) 120 p->ref(); 121 if (m_private) 122 m_private->deref(); 123 m_private = p; 124 } 125