OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008, 2012 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 } | 55 } |
56 | 56 |
57 CSSSelectorList CSSSelectorList::adoptSelectorVector( | 57 CSSSelectorList CSSSelectorList::adoptSelectorVector( |
58 Vector<std::unique_ptr<CSSParserSelector>>& selectorVector) { | 58 Vector<std::unique_ptr<CSSParserSelector>>& selectorVector) { |
59 size_t flattenedSize = 0; | 59 size_t flattenedSize = 0; |
60 for (size_t i = 0; i < selectorVector.size(); ++i) { | 60 for (size_t i = 0; i < selectorVector.size(); ++i) { |
61 for (CSSParserSelector* selector = selectorVector[i].get(); selector; | 61 for (CSSParserSelector* selector = selectorVector[i].get(); selector; |
62 selector = selector->tagHistory()) | 62 selector = selector->tagHistory()) |
63 ++flattenedSize; | 63 ++flattenedSize; |
64 } | 64 } |
65 ASSERT(flattenedSize); | 65 DCHECK(flattenedSize); |
66 | 66 |
67 CSSSelectorList list; | 67 CSSSelectorList list; |
68 list.m_selectorArray = | 68 list.m_selectorArray = |
69 reinterpret_cast<CSSSelector*>(WTF::Partitions::fastMalloc( | 69 reinterpret_cast<CSSSelector*>(WTF::Partitions::fastMalloc( |
70 sizeof(CSSSelector) * flattenedSize, kCSSSelectorTypeName)); | 70 sizeof(CSSSelector) * flattenedSize, kCSSSelectorTypeName)); |
71 size_t arrayIndex = 0; | 71 size_t arrayIndex = 0; |
72 for (size_t i = 0; i < selectorVector.size(); ++i) { | 72 for (size_t i = 0; i < selectorVector.size(); ++i) { |
73 CSSParserSelector* current = selectorVector[i].get(); | 73 CSSParserSelector* current = selectorVector[i].get(); |
74 while (current) { | 74 while (current) { |
75 // Move item from the parser selector vector into m_selectorArray without | 75 // Move item from the parser selector vector into m_selectorArray without |
76 // invoking destructor (Ugh.) | 76 // invoking destructor (Ugh.) |
77 CSSSelector* currentSelector = current->releaseSelector().release(); | 77 CSSSelector* currentSelector = current->releaseSelector().release(); |
78 memcpy(&list.m_selectorArray[arrayIndex], currentSelector, | 78 memcpy(&list.m_selectorArray[arrayIndex], currentSelector, |
79 sizeof(CSSSelector)); | 79 sizeof(CSSSelector)); |
80 WTF::Partitions::fastFree(currentSelector); | 80 WTF::Partitions::fastFree(currentSelector); |
81 | 81 |
82 current = current->tagHistory(); | 82 current = current->tagHistory(); |
83 ASSERT(!list.m_selectorArray[arrayIndex].isLastInSelectorList()); | 83 DCHECK(!list.m_selectorArray[arrayIndex].isLastInSelectorList()); |
84 if (current) | 84 if (current) |
85 list.m_selectorArray[arrayIndex].setNotLastInTagHistory(); | 85 list.m_selectorArray[arrayIndex].setNotLastInTagHistory(); |
86 ++arrayIndex; | 86 ++arrayIndex; |
87 } | 87 } |
88 ASSERT(list.m_selectorArray[arrayIndex - 1].isLastInTagHistory()); | 88 DCHECK(list.m_selectorArray[arrayIndex - 1].isLastInTagHistory()); |
89 } | 89 } |
90 ASSERT(flattenedSize == arrayIndex); | 90 DCHECK_EQ(flattenedSize, arrayIndex); |
91 list.m_selectorArray[arrayIndex - 1].setLastInSelectorList(); | 91 list.m_selectorArray[arrayIndex - 1].setLastInSelectorList(); |
92 selectorVector.clear(); | 92 selectorVector.clear(); |
93 | 93 |
94 return list; | 94 return list; |
95 } | 95 } |
96 | 96 |
97 unsigned CSSSelectorList::length() const { | 97 unsigned CSSSelectorList::length() const { |
98 if (!m_selectorArray) | 98 if (!m_selectorArray) |
99 return 0; | 99 return 0; |
100 CSSSelector* current = m_selectorArray; | 100 CSSSelector* current = m_selectorArray; |
101 while (!current->isLastInSelectorList()) | 101 while (!current->isLastInSelectorList()) |
102 ++current; | 102 ++current; |
103 return (current - m_selectorArray) + 1; | 103 return (current - m_selectorArray) + 1; |
104 } | 104 } |
105 | 105 |
106 void CSSSelectorList::deleteSelectors() { | 106 void CSSSelectorList::deleteSelectors() { |
107 ASSERT(m_selectorArray); | 107 DCHECK(m_selectorArray); |
108 | 108 |
109 bool finished = false; | 109 bool finished = false; |
110 for (CSSSelector* s = m_selectorArray; !finished; ++s) { | 110 for (CSSSelector* s = m_selectorArray; !finished; ++s) { |
111 finished = s->isLastInSelectorList(); | 111 finished = s->isLastInSelectorList(); |
112 s->~CSSSelector(); | 112 s->~CSSSelector(); |
113 } | 113 } |
114 | 114 |
115 WTF::Partitions::fastFree(m_selectorArray); | 115 WTF::Partitions::fastFree(m_selectorArray); |
116 } | 116 } |
117 | 117 |
118 String CSSSelectorList::selectorsText() const { | 118 String CSSSelectorList::selectorsText() const { |
119 StringBuilder result; | 119 StringBuilder result; |
120 | 120 |
121 for (const CSSSelector* s = first(); s; s = next(*s)) { | 121 for (const CSSSelector* s = first(); s; s = next(*s)) { |
122 if (s != first()) | 122 if (s != first()) |
123 result.append(", "); | 123 result.append(", "); |
124 result.append(s->selectorText()); | 124 result.append(s->selectorText()); |
125 } | 125 } |
126 | 126 |
127 return result.toString(); | 127 return result.toString(); |
128 } | 128 } |
129 | 129 |
130 } // namespace blink | 130 } // namespace blink |
OLD | NEW |