int CUtlVector<T, A>::InsertBefore(int elem, const T& src) { // Can't insert something that's in the list... reallocation may hose us assert((Base() == NULL) || (&src < Base()) || (&src >= (Base() + Count()))); // Can insert at the end assert((elem == Count()) || IsValidIndex(elem)); GrowVector(); ShiftElementsRight(elem); CopyConstruct(&Element(elem), src); return elem; }
int CUtlVector<T, A>::AddVectorToTail(CUtlVector const &src) { assert(&src != this); int base = Count(); // Make space. int nSrcCount = src.Count(); EnsureCapacity(base + nSrcCount); // Copy the elements. m_Size += nSrcCount; for(int i = 0; i < nSrcCount; i++) { CopyConstruct(&Element(base + i), src[i]); } return base; }
inline int CUtlVector<T, A>::InsertMultipleBefore(int elem, int num, const T *pToInsert) { if(num == 0) return elem; // Can insert at the end assert((elem == Count()) || IsValidIndex(elem)); GrowVector(num); ShiftElementsRight(elem, num); // Invoke default constructors if(!pToInsert) { for(int i = 0; i < num; ++i) { Construct(&Element(elem + i)); } } else { for(int i = 0; i < num; i++) { CopyConstruct(&Element(elem + i), pToInsert[i]); } } return elem; }
std::shared_ptr<void> Type::MoveConstruct(void * r) const { assert(IsMoveConstructible()); if(IsTrivial()) return CopyConstruct(r); else return nonTrivialOps->moveConstruct(r); }