Changeset 2809
- Timestamp:
- Jul 23, 2013, 8:14:41 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lol/base/array.h
r2780 r2809 188 188 void Remove(int pos, int todelete = 1) 189 189 { 190 ASSERT(pos >= 0);191 190 ASSERT(todelete >= 0); 191 ASSERT(pos - todelete >= -m_count - 1); 192 192 ASSERT(pos + todelete <= m_count); 193 if (pos < 0) 194 pos = m_count + pos; 195 193 196 for (int i = pos; i + todelete < m_count; i++) 194 197 m_data[i] = m_data[i + todelete]; 195 198 for (int i = m_count - todelete; i < m_count; i++) 196 199 m_data[i].~Element(); 200 m_count -= todelete; 201 } 202 203 void RemoveSwap(int pos, int todelete = 1) 204 { 205 ASSERT(todelete >= 0); 206 ASSERT(pos - todelete >= -m_count - 1); 207 ASSERT(pos + todelete <= m_count); 208 if (pos < 0) 209 pos = m_count + pos; 210 211 for (int i = 0; i < todelete; i++) 212 { 213 if (pos + i < m_count - 1 - i) 214 m_data[pos + i] = m_data[m_count - 1 - i]; 215 m_data[m_count - 1 - i].~Element(); 216 } 197 217 m_count -= todelete; 198 218 } -
trunk/test/unit/array.cpp
r2532 r2809 84 84 a.Remove(1); 85 85 86 LOLUNIT_ASSERT_EQUAL(a.Count(), 3); 86 87 LOLUNIT_ASSERT_EQUAL(a[0], 0); 87 88 LOLUNIT_ASSERT_EQUAL(a[1], 2); 88 89 LOLUNIT_ASSERT_EQUAL(a[2], 3); 90 91 Array<int> b; 92 b << 0 << 1 << 2 << 3; 93 b.Remove(-2); 94 95 LOLUNIT_ASSERT_EQUAL(b.Count(), 3); 96 LOLUNIT_ASSERT_EQUAL(b[0], 0); 97 LOLUNIT_ASSERT_EQUAL(b[1], 1); 98 LOLUNIT_ASSERT_EQUAL(b[2], 3); 99 } 100 101 LOLUNIT_TEST(ArrayRemoveSwap) 102 { 103 Array<int> a; 104 a << 0 << 1 << 2 << 3; 105 a.RemoveSwap(1); 106 107 LOLUNIT_ASSERT_EQUAL(a.Count(), 3); 108 LOLUNIT_ASSERT_EQUAL(a[0], 0); 109 LOLUNIT_ASSERT_EQUAL(a[1], 3); 110 LOLUNIT_ASSERT_EQUAL(a[2], 2); 111 112 Array<int> b; 113 b << 0 << 1 << 2 << 3; 114 b.Remove(1, 2); 115 116 LOLUNIT_ASSERT_EQUAL(b.Count(), 2); 117 LOLUNIT_ASSERT_EQUAL(b[0], 0); 118 LOLUNIT_ASSERT_EQUAL(b[1], 3); 89 119 } 90 120 #endif
Note: See TracChangeset
for help on using the changeset viewer.