Annotation of elwix/tools/oldlzma/SRC/Common/Vector.cpp, revision 1.1
1.1 ! misho 1: // Common/Vector.cpp
! 2:
! 3: #include "StdAfx.h"
! 4:
! 5: #include <string.h>
! 6:
! 7: #include "Vector.h"
! 8:
! 9: CBaseRecordVector::~CBaseRecordVector()
! 10: { delete []((unsigned char *)_items); }
! 11: void CBaseRecordVector::Clear()
! 12: { DeleteFrom(0); }
! 13: void CBaseRecordVector::DeleteBack()
! 14: { Delete(_size - 1); }
! 15: void CBaseRecordVector::DeleteFrom(int index)
! 16: { Delete(index, _size - index); }
! 17:
! 18: void CBaseRecordVector::ReserveOnePosition()
! 19: {
! 20: if(_size != _capacity)
! 21: return;
! 22: int delta;
! 23: if (_capacity > 64)
! 24: delta = _capacity / 2;
! 25: else if (_capacity > 8)
! 26: delta = 8;
! 27: else
! 28: delta = 4;
! 29: Reserve(_capacity + delta);
! 30: }
! 31:
! 32: void CBaseRecordVector::Reserve(int newCapacity)
! 33: {
! 34: if(newCapacity <= _capacity)
! 35: return;
! 36: /*
! 37: #ifndef _DEBUG
! 38: static const unsigned int kMaxVectorSize = 0xF0000000;
! 39: if(newCapacity < _size ||
! 40: ((unsigned int )newCapacity * (unsigned int )_itemSize) > kMaxVectorSize)
! 41: throw 1052354;
! 42: #endif
! 43: */
! 44: unsigned char *p = new unsigned char[newCapacity * _itemSize];
! 45: int numRecordsToMove = _capacity;
! 46: memmove(p, _items, _itemSize * numRecordsToMove);
! 47: delete [](unsigned char *)_items;
! 48: _items = p;
! 49: _capacity = newCapacity;
! 50: }
! 51:
! 52: void CBaseRecordVector::MoveItems(int destIndex, int srcIndex)
! 53: {
! 54: memmove(((unsigned char *)_items) + destIndex * _itemSize,
! 55: ((unsigned char *)_items) + srcIndex * _itemSize,
! 56: _itemSize * (_size - srcIndex));
! 57: }
! 58:
! 59: void CBaseRecordVector::InsertOneItem(int index)
! 60: {
! 61: ReserveOnePosition();
! 62: MoveItems(index + 1, index);
! 63: _size++;
! 64: }
! 65:
! 66: void CBaseRecordVector::Delete(int index, int num)
! 67: {
! 68: TestIndexAndCorrectNum(index, num);
! 69: if (num > 0)
! 70: {
! 71: MoveItems(index, index + num);
! 72: _size -= num;
! 73: }
! 74: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>