other-licenses/7zstub/src/Common/Vector.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Common/Vector.cpp
     3 #include "StdAfx.h"
     5 #include <string.h>
     7 #include "Vector.h"
     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); }
    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 }
    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 }
    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 }
    59 void CBaseRecordVector::InsertOneItem(int index)
    60 {
    61   ReserveOnePosition();
    62   MoveItems(index + 1, index);
    63   _size++;
    64 }
    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 }

mercurial