OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007, 2008, 2010, 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008, 2010, 2011, 2012 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 return m_data && m_data->contains(string); | 49 return m_data && m_data->contains(string); |
50 } | 50 } |
51 bool containsAll(const SpaceSplitString& names) const { | 51 bool containsAll(const SpaceSplitString& names) const { |
52 return !names.m_data || (m_data && m_data->containsAll(*names.m_data)); | 52 return !names.m_data || (m_data && m_data->containsAll(*names.m_data)); |
53 } | 53 } |
54 void add(const AtomicString&); | 54 void add(const AtomicString&); |
55 bool remove(const AtomicString&); | 55 bool remove(const AtomicString&); |
56 | 56 |
57 size_t size() const { return m_data ? m_data->size() : 0; } | 57 size_t size() const { return m_data ? m_data->size() : 0; } |
58 bool isNull() const { return !m_data; } | 58 bool isNull() const { return !m_data; } |
59 const AtomicString& operator[](size_t i) const { | 59 const AtomicString& operator[](size_t i) const { return (*m_data)[i]; } |
60 return (*m_data)[i]; | |
61 } | |
62 | 60 |
63 private: | 61 private: |
64 class Data : public RefCounted<Data> { | 62 class Data : public RefCounted<Data> { |
65 public: | 63 public: |
66 static PassRefPtr<Data> create(const AtomicString&); | 64 static PassRefPtr<Data> create(const AtomicString&); |
67 static PassRefPtr<Data> createUnique(const Data&); | 65 static PassRefPtr<Data> createUnique(const Data&); |
68 | 66 |
69 ~Data(); | 67 ~Data(); |
70 | 68 |
71 bool contains(const AtomicString& string) { | 69 bool contains(const AtomicString& string) { |
72 size_t size = m_vector.size(); | 70 size_t size = m_vector.size(); |
73 for (size_t i = 0; i < size; ++i) { | 71 for (size_t i = 0; i < size; ++i) { |
74 if (m_vector[i] == string) | 72 if (m_vector[i] == string) |
75 return true; | 73 return true; |
76 } | 74 } |
77 return false; | 75 return false; |
78 } | 76 } |
79 | 77 |
80 bool containsAll(Data&); | 78 bool containsAll(Data&); |
81 | 79 |
82 void add(const AtomicString&); | 80 void add(const AtomicString&); |
83 void remove(unsigned index); | 81 void remove(unsigned index); |
84 | 82 |
85 bool isUnique() const { return m_keyString.isNull(); } | 83 bool isUnique() const { return m_keyString.isNull(); } |
86 size_t size() const { return m_vector.size(); } | 84 size_t size() const { return m_vector.size(); } |
87 const AtomicString& operator[](size_t i) { | 85 const AtomicString& operator[](size_t i) { return m_vector[i]; } |
88 return m_vector[i]; | |
89 } | |
90 | 86 |
91 private: | 87 private: |
92 explicit Data(const AtomicString&); | 88 explicit Data(const AtomicString&); |
93 explicit Data(const Data&); | 89 explicit Data(const Data&); |
94 | 90 |
95 void createVector(const String&); | 91 void createVector(const String&); |
96 template <typename CharacterType> | 92 template <typename CharacterType> |
97 inline void createVector(const CharacterType*, unsigned); | 93 inline void createVector(const CharacterType*, unsigned); |
98 | 94 |
99 AtomicString m_keyString; | 95 AtomicString m_keyString; |
100 Vector<AtomicString, 4> m_vector; | 96 Vector<AtomicString, 4> m_vector; |
101 }; | 97 }; |
102 typedef HashMap<AtomicString, Data*> DataMap; | 98 typedef HashMap<AtomicString, Data*> DataMap; |
103 | 99 |
104 static DataMap& sharedDataMap(); | 100 static DataMap& sharedDataMap(); |
105 | 101 |
106 void ensureUnique() { | 102 void ensureUnique() { |
107 if (m_data && !m_data->isUnique()) | 103 if (m_data && !m_data->isUnique()) |
108 m_data = Data::createUnique(*m_data); | 104 m_data = Data::createUnique(*m_data); |
109 } | 105 } |
110 | 106 |
111 RefPtr<Data> m_data; | 107 RefPtr<Data> m_data; |
112 }; | 108 }; |
113 | 109 |
114 } // namespace blink | 110 } // namespace blink |
115 | 111 |
116 #endif // SpaceSplitString_h | 112 #endif // SpaceSplitString_h |
OLD | NEW |