|
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 WebCore::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 WebCore::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 WebCore::String(m_private).utf8(); |
|
64 } |
|
65 |
|
66 WebDOMString WebDOMString::fromUTF8(const char* data, size_t length) |
|
67 { |
|
68 return WebCore::String::fromUTF8(data, length); |
|
69 } |
|
70 |
|
71 WebDOMString WebDOMString::fromUTF8(const char* data) |
|
72 { |
|
73 return WebCore::String::fromUTF8(data); |
|
74 } |
|
75 |
|
76 WebDOMString::WebDOMString(const WebCore::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 WebCore::String& s) |
|
84 { |
|
85 assign(static_cast<WebDOMStringPrivate*>(s.impl())); |
|
86 return *this; |
|
87 } |
|
88 |
|
89 WebDOMString::operator WebCore::String() const |
|
90 { |
|
91 return m_private; |
|
92 } |
|
93 |
|
94 WebDOMString::WebDOMString(const WebCore::AtomicString& s) |
|
95 : m_private(0) |
|
96 { |
|
97 assign(s.string()); |
|
98 } |
|
99 |
|
100 WebDOMString& WebDOMString::operator=(const WebCore::AtomicString& s) |
|
101 { |
|
102 assign(s.string()); |
|
103 return *this; |
|
104 } |
|
105 |
|
106 WebDOMString::operator WebCore::AtomicString() const |
|
107 { |
|
108 return WebCore::AtomicString(static_cast<WebCore::StringImpl *>(m_private)); |
|
109 } |
|
110 |
|
111 bool WebDOMString::equals(const char* string) const |
|
112 { |
|
113 return WebCore::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 } |