Changeset 38856 in webkit for trunk/JavaScriptCore/bytecompiler/SegmentedVector.h
- Timestamp:
- Dec 1, 2008, 1:07:07 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bytecompiler/SegmentedVector.h
r38632 r38856 86 86 } 87 87 88 void res ize(size_t size)88 void reserveCapacity(size_t newCapacity) 89 89 { 90 if (size < m_size) 91 shrink(size); 92 else if (size > m_size) 93 grow(size); 94 ASSERT(size == m_size); 95 } 90 if (newCapacity <= m_size) 91 return; 96 92 97 private: 98 void shrink(size_t size) 99 { 100 ASSERT(size < m_size); 101 size_t numSegments = size / SegmentSize; 102 size_t extra = size % SegmentSize; 103 if (extra) 104 numSegments++; 105 if (!numSegments) { 106 for (size_t i = 1; i < m_segments.size(); i++) 107 delete m_segments[i]; 108 m_segments.resize(1); 109 m_inlineSegment.resize(0); 110 m_size = size; 93 if (newCapacity <= SegmentSize) { 94 m_inlineSegment.resize(newCapacity); 95 m_size = newCapacity; 111 96 return; 112 97 } 113 98 114 for (size_t i = numSegments; i < m_segments.size(); i++) 115 delete m_segments[i]; 116 117 m_segments.resize(numSegments); 118 if (extra) 119 m_segments.last()->resize(extra); 120 m_size = size; 121 } 122 123 void grow(size_t size) 124 { 125 ASSERT(size > m_size); 126 if (size <= SegmentSize) { 127 m_inlineSegment.resize(size); 128 m_size = size; 129 return; 130 } 131 132 size_t numSegments = size / SegmentSize; 133 size_t extra = size % SegmentSize; 99 size_t numSegments = newCapacity / SegmentSize; 100 size_t extra = newCapacity % SegmentSize; 134 101 if (extra) 135 102 numSegments++; … … 138 105 if (numSegments == oldSize) { 139 106 m_segments.last()->resize(extra); 140 m_size = size;107 m_size = newCapacity; 141 108 return; 142 109 } … … 156 123 segment->resize(extra ? extra : SegmentSize); 157 124 m_segments[numSegments - 1] = segment; 158 m_size = size;125 m_size = newCapacity; 159 126 } 160 127 128 void clear() 129 { 130 for (size_t i = 1; i < m_segments.size(); i++) 131 delete m_segments[i]; 132 m_segments.resize(1); 133 m_inlineSegment.resize(0); 134 m_size = 0; 135 } 136 137 private: 161 138 typedef Vector<T, SegmentSize> Segment; 162 139 size_t m_size;
Note:
See TracChangeset
for help on using the changeset viewer.