9 CBaseRecordVector::~CBaseRecordVector()
10 { delete []((unsigned char *)_items
); }
11 void CBaseRecordVector::Clear()
13 void CBaseRecordVector::DeleteBack()
14 { Delete(_size
- 1); }
15 void CBaseRecordVector::DeleteFrom(int index
)
16 { Delete(index
, _size
- index
); }
18 void CBaseRecordVector::ReserveOnePosition()
20 if(_size
!= _capacity
)
24 delta
= _capacity
/ 2;
25 else if (_capacity
> 8)
29 Reserve(_capacity
+ delta
);
32 void CBaseRecordVector::Reserve(int newCapacity
)
34 if(newCapacity
<= _capacity
)
38 static const unsigned int kMaxVectorSize = 0xF0000000;
39 if(newCapacity < _size ||
40 ((unsigned int )newCapacity * (unsigned int )_itemSize) > kMaxVectorSize)
44 unsigned char *p
= new unsigned char[newCapacity
* _itemSize
];
45 int numRecordsToMove
= _capacity
;
46 memmove(p
, _items
, _itemSize
* numRecordsToMove
);
47 delete [](unsigned char *)_items
;
49 _capacity
= newCapacity
;
52 void CBaseRecordVector::MoveItems(int destIndex
, int srcIndex
)
54 memmove(((unsigned char *)_items
) + destIndex
* _itemSize
,
55 ((unsigned char *)_items
) + srcIndex
* _itemSize
,
56 _itemSize
* (_size
- srcIndex
));
59 void CBaseRecordVector::InsertOneItem(int index
)
62 MoveItems(index
+ 1, index
);
66 void CBaseRecordVector::Delete(int index
, int num
)
68 TestIndexAndCorrectNum(index
, num
);
71 MoveItems(index
, index
+ num
);