| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 | 92 |
| 93 operator const String&() const { return m_string; } | 93 operator const String&() const { return m_string; } |
| 94 const String& string() const { return m_string; }; | 94 const String& string() const { return m_string; }; |
| 95 | 95 |
| 96 StringImpl* impl() const { return m_string.impl(); } | 96 StringImpl* impl() const { return m_string.impl(); } |
| 97 | 97 |
| 98 bool is8Bit() const { return m_string.is8Bit(); } | 98 bool is8Bit() const { return m_string.is8Bit(); } |
| 99 const LChar* characters8() const { return m_string.characters8(); } | 99 const LChar* characters8() const { return m_string.characters8(); } |
| 100 const UChar* characters16() const { return m_string.characters16(); } | 100 const UChar* characters16() const { return m_string.characters16(); } |
| 101 unsigned length() const { return m_string.length(); } | 101 unsigned length() const { return m_string.length(); } |
| 102 | 102 |
| 103 UChar operator[](unsigned int i) const { return m_string[i]; } | 103 UChar operator[](unsigned int i) const { return m_string[i]; } |
| 104 | 104 |
| 105 bool contains(UChar c) const { return m_string.contains(c); } | 105 bool contains(UChar c) const { return m_string.contains(c); } |
| 106 bool contains(const LChar* s, bool caseSensitive = true) const | 106 bool contains(const LChar* s, bool caseSensitive = true) const |
| 107 { return m_string.contains(s, caseSensitive); } | 107 { return m_string.contains(s, caseSensitive); } |
| 108 bool contains(const String& s, bool caseSensitive = true) const | 108 bool contains(const String& s, bool caseSensitive = true) const |
| 109 { return m_string.contains(s, caseSensitive); } | 109 { return m_string.contains(s, caseSensitive); } |
| 110 | 110 |
| 111 size_t find(UChar c, size_t start = 0) const { return m_string.find(c, start
); } | 111 size_t find(UChar c, size_t start = 0) const { return m_string.find(c, start
); } |
| 112 size_t find(const LChar* s, size_t start = 0, bool caseSentitive = true) con
st | 112 size_t find(const LChar* s, size_t start = 0, bool caseSentitive = true) con
st |
| 113 { return m_string.find(s, start, caseSentitive); } | 113 { return m_string.find(s, start, caseSentitive); } |
| 114 size_t find(const String& s, size_t start = 0, bool caseSentitive = true) co
nst | 114 size_t find(const String& s, size_t start = 0, bool caseSentitive = true) co
nst |
| 115 { return m_string.find(s, start, caseSentitive); } | 115 { return m_string.find(s, start, caseSentitive); } |
| 116 | 116 |
| 117 bool startsWith(const String& s, bool caseSensitive = true) const | 117 bool startsWith(const String& s, bool caseSensitive = true) const |
| 118 { return m_string.startsWith(s, caseSensitive); } | 118 { return m_string.startsWith(s, caseSensitive); } |
| 119 bool startsWith(UChar character) const | 119 bool startsWith(UChar character) const |
| 120 { return m_string.startsWith(character); } | 120 { return m_string.startsWith(character); } |
| 121 template<unsigned matchLength> | 121 template<unsigned matchLength> |
| 122 bool startsWith(const char (&prefix)[matchLength], bool caseSensitive = true
) const | 122 bool startsWith(const char (&prefix)[matchLength], bool caseSensitive = true
) const |
| 123 { return m_string.startsWith<matchLength>(prefix, caseSensitive); } | 123 { return m_string.startsWith<matchLength>(prefix, caseSensitive); } |
| 124 | 124 |
| 125 bool endsWith(const String& s, bool caseSensitive = true) const | 125 bool endsWith(const String& s, bool caseSensitive = true) const |
| 126 { return m_string.endsWith(s, caseSensitive); } | 126 { return m_string.endsWith(s, caseSensitive); } |
| 127 bool endsWith(UChar character) const | 127 bool endsWith(UChar character) const |
| 128 { return m_string.endsWith(character); } | 128 { return m_string.endsWith(character); } |
| 129 template<unsigned matchLength> | 129 template<unsigned matchLength> |
| 130 bool endsWith(const char (&prefix)[matchLength], bool caseSensitive = true)
const | 130 bool endsWith(const char (&prefix)[matchLength], bool caseSensitive = true)
const |
| 131 { return m_string.endsWith<matchLength>(prefix, caseSensitive); } | 131 { return m_string.endsWith<matchLength>(prefix, caseSensitive); } |
| 132 | 132 |
| 133 AtomicString lower() const; | 133 AtomicString lower() const; |
| 134 AtomicString upper() const { return AtomicString(impl()->upper()); } | 134 AtomicString upper() const { return AtomicString(impl()->upper()); } |
| 135 | 135 |
| 136 int toInt(bool* ok = 0) const { return m_string.toInt(ok); } | 136 int toInt(bool* ok = 0) const { return m_string.toInt(ok); } |
| 137 double toDouble(bool* ok = 0) const { return m_string.toDouble(ok); } | 137 double toDouble(bool* ok = 0) const { return m_string.toDouble(ok); } |
| 138 float toFloat(bool* ok = 0) const { return m_string.toFloat(ok); } | 138 float toFloat(bool* ok = 0) const { return m_string.toFloat(ok); } |
| 139 bool percentage(int& p) const { return m_string.percentage(p); } | 139 bool percentage(int& p) const { return m_string.percentage(p); } |
| 140 | 140 |
| 141 bool isNull() const { return m_string.isNull(); } | 141 bool isNull() const { return m_string.isNull(); } |
| 142 bool isEmpty() const { return m_string.isEmpty(); } | 142 bool isEmpty() const { return m_string.isEmpty(); } |
| 143 | 143 |
| 144 static void remove(StringImpl*); | 144 static void remove(StringImpl*); |
| 145 | 145 |
| 146 #if USE(CF) | 146 #if USE(CF) |
| 147 AtomicString(CFStringRef s) : m_string(add(s)) { } | 147 AtomicString(CFStringRef s) : m_string(add(s)) { } |
| 148 #endif | 148 #endif |
| 149 #ifdef __OBJC__ | 149 #ifdef __OBJC__ |
| 150 AtomicString(NSString* s) : m_string(add((CFStringRef)s)) { } | 150 AtomicString(NSString* s) : m_string(add((CFStringRef)s)) { } |
| 151 operator NSString*() const { return m_string; } | 151 operator NSString*() const { return m_string; } |
| 152 #endif | 152 #endif |
| 153 // AtomicString::fromUTF8 will return a null string if | 153 // AtomicString::fromUTF8 will return a null string if |
| 154 // the input data contains invalid UTF-8 sequences. | 154 // the input data contains invalid UTF-8 sequences. |
| 155 static AtomicString fromUTF8(const char*, size_t); | 155 static AtomicString fromUTF8(const char*, size_t); |
| 156 static AtomicString fromUTF8(const char*); | 156 static AtomicString fromUTF8(const char*); |
| 157 | 157 |
| 158 #ifndef NDEBUG | 158 #ifndef NDEBUG |
| 159 void show() const; | 159 void show() const; |
| 160 #endif | 160 #endif |
| 161 | 161 |
| 162 private: | 162 private: |
| 163 // The explicit constructors with AtomicString::ConstructFromLiteral must be
used for literals. | 163 // The explicit constructors with AtomicString::ConstructFromLiteral must be
used for literals. |
| 164 AtomicString(ASCIILiteral); | 164 AtomicString(ASCIILiteral); |
| 165 | 165 |
| 166 String m_string; | 166 String m_string; |
| 167 | 167 |
| 168 static PassRefPtr<StringImpl> add(const LChar*); | 168 static PassRefPtr<StringImpl> add(const LChar*); |
| 169 ALWAYS_INLINE static PassRefPtr<StringImpl> add(const char* s) { return add(
reinterpret_cast<const LChar*>(s)); }; | 169 ALWAYS_INLINE static PassRefPtr<StringImpl> add(const char* s) { return add(
reinterpret_cast<const LChar*>(s)); }; |
| 170 static PassRefPtr<StringImpl> add(const LChar*, unsigned length); | 170 static PassRefPtr<StringImpl> add(const LChar*, unsigned length); |
| 171 static PassRefPtr<StringImpl> add(const UChar*, unsigned length); | 171 static PassRefPtr<StringImpl> add(const UChar*, unsigned length); |
| 172 ALWAYS_INLINE static PassRefPtr<StringImpl> add(const char* s, unsigned leng
th) { return add(reinterpret_cast<const LChar*>(s), length); }; | 172 ALWAYS_INLINE static PassRefPtr<StringImpl> add(const char* s, unsigned leng
th) { return add(reinterpret_cast<const LChar*>(s), length); }; |
| 173 static PassRefPtr<StringImpl> add(const UChar*, unsigned length, unsigned ex
istingHash); | 173 static PassRefPtr<StringImpl> add(const UChar*, unsigned length, unsigned ex
istingHash); |
| 174 static PassRefPtr<StringImpl> add(const UChar*); | 174 static PassRefPtr<StringImpl> add(const UChar*); |
| 175 static PassRefPtr<StringImpl> add(StringImpl*, unsigned offset, unsigned len
gth); | 175 static PassRefPtr<StringImpl> add(StringImpl*, unsigned offset, unsigned len
gth); |
| 176 ALWAYS_INLINE static PassRefPtr<StringImpl> add(StringImpl* r) | 176 ALWAYS_INLINE static PassRefPtr<StringImpl> add(StringImpl* r) |
| 177 { | 177 { |
| 178 if (!r || r->isAtomic()) | 178 if (!r || r->isAtomic()) |
| 179 return r; | 179 return r; |
| 180 return addSlowCase(r); | 180 return addSlowCase(r); |
| 181 } | 181 } |
| 182 static PassRefPtr<StringImpl> addFromLiteralData(const char* characters, uns
igned length); | 182 static PassRefPtr<StringImpl> addFromLiteralData(const char* characters, uns
igned length); |
| 183 static PassRefPtr<StringImpl> addSlowCase(StringImpl*); | 183 static PassRefPtr<StringImpl> addSlowCase(StringImpl*); |
| 184 #if USE(CF) | 184 #if USE(CF) |
| 185 static PassRefPtr<StringImpl> add(CFStringRef); | 185 static PassRefPtr<StringImpl> add(CFStringRef); |
| 186 #endif | 186 #endif |
| 187 | 187 |
| 188 static AtomicString fromUTF8Internal(const char*, const char*); | 188 static AtomicString fromUTF8Internal(const char*, const char*); |
| 189 }; | 189 }; |
| 190 | 190 |
| 191 inline bool operator==(const AtomicString& a, const AtomicString& b) { return a.
impl() == b.impl(); } | 191 inline bool operator==(const AtomicString& a, const AtomicString& b) { return a.
impl() == b.impl(); } |
| 192 WTF_EXPORT bool operator==(const AtomicString&, const LChar*); | 192 WTF_EXPORT bool operator==(const AtomicString&, const LChar*); |
| 193 inline bool operator==(const AtomicString& a, const char* b) { return WTF::equal
(a.impl(), reinterpret_cast<const LChar*>(b)); } | 193 inline bool operator==(const AtomicString& a, const char* b) { return WTF::equal
(a.impl(), reinterpret_cast<const LChar*>(b)); } |
| 194 inline bool operator==(const AtomicString& a, const Vector<UChar>& b) { return a
.impl() && equal(a.impl(), b.data(), b.size()); } | 194 inline bool operator==(const AtomicString& a, const Vector<UChar>& b) { return a
.impl() && equal(a.impl(), b.data(), b.size()); } |
| 195 inline bool operator==(const AtomicString& a, const String& b) { return equal(a.
impl(), b.impl()); } | 195 inline bool operator==(const AtomicString& a, const String& b) { return equal(a.
impl(), b.impl()); } |
| 196 inline bool operator==(const LChar* a, const AtomicString& b) { return b == a; } | 196 inline bool operator==(const LChar* a, const AtomicString& b) { return b == a; } |
| 197 inline bool operator==(const String& a, const AtomicString& b) { return equal(a.
impl(), b.impl()); } | 197 inline bool operator==(const String& a, const AtomicString& b) { return equal(a.
impl(), b.impl()); } |
| 198 inline bool operator==(const Vector<UChar>& a, const AtomicString& b) { return b
== a; } | 198 inline bool operator==(const Vector<UChar>& a, const AtomicString& b) { return b
== a; } |
| 199 | 199 |
| 200 inline bool operator!=(const AtomicString& a, const AtomicString& b) { return a.
impl() != b.impl(); } | 200 inline bool operator!=(const AtomicString& a, const AtomicString& b) { return a.
impl() != b.impl(); } |
| 201 inline bool operator!=(const AtomicString& a, const LChar* b) { return !(a == b)
; } | 201 inline bool operator!=(const AtomicString& a, const LChar* b) { return !(a == b)
; } |
| 202 inline bool operator!=(const AtomicString& a, const char* b) { return !(a == b);
} | 202 inline bool operator!=(const AtomicString& a, const char* b) { return !(a == b);
} |
| 203 inline bool operator!=(const AtomicString& a, const String& b) { return !equal(a
.impl(), b.impl()); } | 203 inline bool operator!=(const AtomicString& a, const String& b) { return !equal(a
.impl(), b.impl()); } |
| 204 inline bool operator!=(const AtomicString& a, const Vector<UChar>& b) { return !
(a == b); } | 204 inline bool operator!=(const AtomicString& a, const Vector<UChar>& b) { return !
(a == b); } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 using WTF::textAtom; | 260 using WTF::textAtom; |
| 261 using WTF::commentAtom; | 261 using WTF::commentAtom; |
| 262 using WTF::starAtom; | 262 using WTF::starAtom; |
| 263 using WTF::xmlAtom; | 263 using WTF::xmlAtom; |
| 264 using WTF::xmlnsAtom; | 264 using WTF::xmlnsAtom; |
| 265 using WTF::xlinkAtom; | 265 using WTF::xlinkAtom; |
| 266 #endif | 266 #endif |
| 267 | 267 |
| 268 #include "wtf/text/StringConcatenate.h" | 268 #include "wtf/text/StringConcatenate.h" |
| 269 #endif // AtomicString_h | 269 #endif // AtomicString_h |
| OLD | NEW |