| 327 | |
| 328 | template <typename T> |
| 329 | bool dmSet<T>::Add(const T& value) |
| 330 | { |
| 331 | T* end = m_Values + m_Size; |
| 332 | T* p = LowerBound(m_Values, end, value); |
| 333 | if (p < end && (*p) == value) |
| 334 | { |
| 335 | return false; // Already existed |
| 336 | } |
| 337 | |
| 338 | assert(!Full()); |
| 339 | |
| 340 | uint32_t count = end - p; |
| 341 | memmove(p+1, p, count * sizeof(T)); |
| 342 | (*p) = value; |
| 343 | m_Size++; |
| 344 | return true; |
| 345 | } |
| 346 | |
| 347 | template <typename T> |
| 348 | bool dmSet<T>::Remove(const T& value) |