| Index: Source/core/dom/SpaceSplitString.h
|
| diff --git a/Source/core/dom/SpaceSplitString.h b/Source/core/dom/SpaceSplitString.h
|
| index 6c98ec9827dd7b3fd28224bfc61b681570547092..c5f47adb6c6173cd23969dcff3e9af3013490683 100644
|
| --- a/Source/core/dom/SpaceSplitString.h
|
| +++ b/Source/core/dom/SpaceSplitString.h
|
| @@ -27,12 +27,32 @@
|
|
|
| namespace blink {
|
|
|
| - class SpaceSplitStringData : public RefCounted<SpaceSplitStringData> {
|
| +class SpaceSplitString {
|
| +public:
|
| + SpaceSplitString() { }
|
| + SpaceSplitString(const AtomicString& string, bool shouldFoldCase) { set(string, shouldFoldCase); }
|
| +
|
| + bool operator!=(const SpaceSplitString& other) const { return m_data != other.m_data; }
|
| +
|
| + void set(const AtomicString&, bool shouldFoldCase);
|
| + void clear() { m_data.clear(); }
|
| +
|
| + bool contains(const AtomicString& string) const { return m_data && m_data->contains(string); }
|
| + bool containsAll(const SpaceSplitString& names) const { return !names.m_data || (m_data && m_data->containsAll(*names.m_data)); }
|
| + void add(const AtomicString&);
|
| + bool remove(const AtomicString&);
|
| +
|
| + size_t size() const { return m_data ? m_data->size() : 0; }
|
| + bool isNull() const { return !m_data; }
|
| + const AtomicString& operator[](size_t i) const { ASSERT_WITH_SECURITY_IMPLICATION(i < size()); return (*m_data)[i]; }
|
| +
|
| +private:
|
| + class Data : public RefCounted<Data> {
|
| public:
|
| - static PassRefPtr<SpaceSplitStringData> create(const AtomicString&);
|
| - static PassRefPtr<SpaceSplitStringData> createUnique(const SpaceSplitStringData&);
|
| + static PassRefPtr<Data> create(const AtomicString&);
|
| + static PassRefPtr<Data> createUnique(const Data&);
|
|
|
| - ~SpaceSplitStringData();
|
| + ~Data();
|
|
|
| bool contains(const AtomicString& string)
|
| {
|
| @@ -44,7 +64,7 @@ namespace blink {
|
| return false;
|
| }
|
|
|
| - bool containsAll(SpaceSplitStringData&);
|
| + bool containsAll(Data&);
|
|
|
| void add(const AtomicString&);
|
| void remove(unsigned index);
|
| @@ -54,8 +74,8 @@ namespace blink {
|
| const AtomicString& operator[](size_t i) { ASSERT_WITH_SECURITY_IMPLICATION(i < size()); return m_vector[i]; }
|
|
|
| private:
|
| - explicit SpaceSplitStringData(const AtomicString&);
|
| - explicit SpaceSplitStringData(const SpaceSplitStringData&);
|
| + explicit Data(const AtomicString&);
|
| + explicit Data(const Data&);
|
|
|
| void createVector(const String&);
|
| template <typename CharacterType>
|
| @@ -64,35 +84,18 @@ namespace blink {
|
| AtomicString m_keyString;
|
| Vector<AtomicString, 4> m_vector;
|
| };
|
| + typedef HashMap<AtomicString, Data*> DataMap;
|
|
|
| - class SpaceSplitString {
|
| - public:
|
| - SpaceSplitString() { }
|
| - SpaceSplitString(const AtomicString& string, bool shouldFoldCase) { set(string, shouldFoldCase); }
|
| -
|
| - bool operator!=(const SpaceSplitString& other) const { return m_data != other.m_data; }
|
| + static DataMap& sharedDataMap();
|
|
|
| - void set(const AtomicString&, bool shouldFoldCase);
|
| - void clear() { m_data.clear(); }
|
| + void ensureUnique()
|
| + {
|
| + if (m_data && !m_data->isUnique())
|
| + m_data = Data::createUnique(*m_data);
|
| + }
|
|
|
| - bool contains(const AtomicString& string) const { return m_data && m_data->contains(string); }
|
| - bool containsAll(const SpaceSplitString& names) const { return !names.m_data || (m_data && m_data->containsAll(*names.m_data)); }
|
| - void add(const AtomicString&);
|
| - bool remove(const AtomicString&);
|
| -
|
| - size_t size() const { return m_data ? m_data->size() : 0; }
|
| - bool isNull() const { return !m_data; }
|
| - const AtomicString& operator[](size_t i) const { ASSERT_WITH_SECURITY_IMPLICATION(i < size()); return (*m_data)[i]; }
|
| -
|
| - private:
|
| - void ensureUnique()
|
| - {
|
| - if (m_data && !m_data->isUnique())
|
| - m_data = SpaceSplitStringData::createUnique(*m_data);
|
| - }
|
| -
|
| - RefPtr<SpaceSplitStringData> m_data;
|
| - };
|
| + RefPtr<Data> m_data;
|
| +};
|
|
|
| } // namespace blink
|
|
|
|
|