Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: third_party/lzma/v4_65/files/CPP/Common/MyVector.cpp

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Common/MyVector.cpp
2
3 #include "StdAfx.h"
4
5 #include <string.h>
6
7 #include "MyVector.h"
8
9 CBaseRecordVector::~CBaseRecordVector() { ClearAndFree(); }
10
11 void CBaseRecordVector::ClearAndFree()
12 {
13 Clear();
14 delete []((unsigned char *)_items);
15 _capacity = 0;
16 _size = 0;
17 _items = 0;
18 }
19
20 void CBaseRecordVector::Clear() { DeleteFrom(0); }
21 void CBaseRecordVector::DeleteBack() { Delete(_size - 1); }
22 void CBaseRecordVector::DeleteFrom(int index) { Delete(index, _size - index); }
23
24 void CBaseRecordVector::ReserveOnePosition()
25 {
26 if (_size != _capacity)
27 return;
28 int delta = 1;
29 if (_capacity >= 64)
30 delta = _capacity / 4;
31 else if (_capacity >= 8)
32 delta = 8;
33 Reserve(_capacity + delta);
34 }
35
36 void CBaseRecordVector::Reserve(int newCapacity)
37 {
38 // if (newCapacity <= _capacity)
39 if (newCapacity == _capacity)
40 return;
41 if ((unsigned)newCapacity >= ((unsigned)1 << (sizeof(unsigned) * 8 - 1)))
42 throw 1052353;
43 size_t newSize = (size_t)(unsigned)newCapacity * _itemSize;
44 if (newSize / _itemSize != (size_t)(unsigned)newCapacity)
45 throw 1052354;
46 unsigned char *p = NULL;
47 if (newSize > 0)
48 {
49 p = new unsigned char[newSize];
50 if (p == 0)
51 throw 1052355;
52 int numRecordsToMove = (_size < newCapacity ? _size : newCapacity);
53 memcpy(p, _items, _itemSize * numRecordsToMove);
54 }
55 delete [](unsigned char *)_items;
56 _items = p;
57 _capacity = newCapacity;
58 }
59
60 void CBaseRecordVector::ReserveDown()
61 {
62 Reserve(_size);
63 }
64
65 void CBaseRecordVector::MoveItems(int destIndex, int srcIndex)
66 {
67 memmove(((unsigned char *)_items) + destIndex * _itemSize,
68 ((unsigned char *)_items) + srcIndex * _itemSize,
69 _itemSize * (_size - srcIndex));
70 }
71
72 void CBaseRecordVector::InsertOneItem(int index)
73 {
74 ReserveOnePosition();
75 MoveItems(index + 1, index);
76 _size++;
77 }
78
79 void CBaseRecordVector::Delete(int index, int num)
80 {
81 TestIndexAndCorrectNum(index, num);
82 if (num > 0)
83 {
84 MoveItems(index, index + num);
85 _size -= num;
86 }
87 }
OLDNEW
« no previous file with comments | « third_party/lzma/v4_65/files/CPP/Common/MyVector.h ('k') | third_party/lzma/v4_65/files/CPP/Common/MyWindows.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698