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>