Coverage Report

Created: 2024-04-23 06:19

/src/unrar/array.hpp
Line
Count
Source (jump to first uncovered line)
1
#ifndef _RAR_ARRAY_
2
#define _RAR_ARRAY_
3
4
extern ErrorHandler ErrHandler;
5
6
template <class T> class Array
7
{
8
  private:
9
    T *Buffer;
10
    size_t BufSize;
11
    size_t AllocSize;
12
    size_t MaxSize;
13
    bool Secure; // Clean memory if true.
14
  public:
15
    Array();
16
    Array(size_t Size);
17
    Array(const Array &Src); // Copy constructor.
18
    ~Array();
19
    inline void CleanData();
20
    inline T& operator [](size_t Item) const;
21
    inline T* operator + (size_t Pos);
22
    inline size_t Size(); // Returns the size in items, not in bytes.
23
    void Add(size_t Items);
24
    void Alloc(size_t Items);
25
    void Reset();
26
    void SoftReset();
27
    void operator = (Array<T> &Src);
28
    void Push(T Item);
29
    void Append(T *Item,size_t Count);
30
705
    T* Addr(size_t Item) {return Buffer+Item;}
Array<wchar_t>::Addr(unsigned long)
Line
Count
Source
30
702
    T* Addr(size_t Item) {return Buffer+Item;}
Array<unsigned char>::Addr(unsigned long)
Line
Count
Source
30
3
    T* Addr(size_t Item) {return Buffer+Item;}
31
    void SetMaxSize(size_t Size) {MaxSize=Size;}
32
    T* Begin() {return Buffer;}
33
    T* End() {return Buffer==NULL ? NULL:Buffer+BufSize;}
34
    void SetSecure() {Secure=true;}
35
};
36
37
38
template <class T> void Array<T>::CleanData()
39
410k
{
40
410k
  Buffer=NULL;
41
410k
  BufSize=0;
42
410k
  AllocSize=0;
43
410k
  MaxSize=0;
44
410k
  Secure=false;
45
410k
}
Array<long>::CleanData()
Line
Count
Source
39
4.09k
{
40
4.09k
  Buffer=NULL;
41
4.09k
  BufSize=0;
42
4.09k
  AllocSize=0;
43
4.09k
  MaxSize=0;
44
4.09k
  Secure=false;
45
4.09k
}
Array<unsigned char>::CleanData()
Line
Count
Source
39
361k
{
40
361k
  Buffer=NULL;
41
361k
  BufSize=0;
42
361k
  AllocSize=0;
43
361k
  MaxSize=0;
44
361k
  Secure=false;
45
361k
}
Array<char>::CleanData()
Line
Count
Source
39
3.72k
{
40
3.72k
  Buffer=NULL;
41
3.72k
  BufSize=0;
42
3.72k
  AllocSize=0;
43
3.72k
  MaxSize=0;
44
3.72k
  Secure=false;
45
3.72k
}
Array<UnpackFilter>::CleanData()
Line
Count
Source
39
4.29k
{
40
4.29k
  Buffer=NULL;
41
4.29k
  BufSize=0;
42
4.29k
  AllocSize=0;
43
4.29k
  MaxSize=0;
44
4.29k
  Secure=false;
45
4.29k
}
Array<UnpackFilter30*>::CleanData()
Line
Count
Source
39
8.58k
{
40
8.58k
  Buffer=NULL;
41
8.58k
  BufSize=0;
42
8.58k
  AllocSize=0;
43
8.58k
  MaxSize=0;
44
8.58k
  Secure=false;
45
8.58k
}
Array<int>::CleanData()
Line
Count
Source
39
4.29k
{
40
4.29k
  Buffer=NULL;
41
4.29k
  BufSize=0;
42
4.29k
  AllocSize=0;
43
4.29k
  MaxSize=0;
44
4.29k
  Secure=false;
45
4.29k
}
Array<wchar_t>::CleanData()
Line
Count
Source
39
24.5k
{
40
24.5k
  Buffer=NULL;
41
24.5k
  BufSize=0;
42
24.5k
  AllocSize=0;
43
24.5k
  MaxSize=0;
44
24.5k
  Secure=false;
45
24.5k
}
46
47
48
template <class T> Array<T>::Array()
49
235k
{
50
235k
  CleanData();
51
235k
}
Array<long>::Array()
Line
Count
Source
49
4.09k
{
50
4.09k
  CleanData();
51
4.09k
}
Array<unsigned char>::Array()
Line
Count
Source
49
190k
{
50
190k
  CleanData();
51
190k
}
Array<UnpackFilter>::Array()
Line
Count
Source
49
4.29k
{
50
4.29k
  CleanData();
51
4.29k
}
Array<UnpackFilter30*>::Array()
Line
Count
Source
49
8.58k
{
50
8.58k
  CleanData();
51
8.58k
}
Array<int>::Array()
Line
Count
Source
49
4.29k
{
50
4.29k
  CleanData();
51
4.29k
}
Array<wchar_t>::Array()
Line
Count
Source
49
24.5k
{
50
24.5k
  CleanData();
51
24.5k
}
52
53
54
template <class T> Array<T>::Array(size_t Size)
55
175k
{
56
175k
  CleanData();
57
175k
  Add(Size);
58
175k
}
Array<unsigned char>::Array(unsigned long)
Line
Count
Source
55
171k
{
56
171k
  CleanData();
57
171k
  Add(Size);
58
171k
}
Array<char>::Array(unsigned long)
Line
Count
Source
55
3.72k
{
56
3.72k
  CleanData();
57
3.72k
  Add(Size);
58
3.72k
}
Unexecuted instantiation: Array<wchar_t>::Array(unsigned long)
59
60
61
// Copy constructor in case we need to pass an object as value.
62
template <class T> Array<T>::Array(const Array &Src)
63
{
64
  CleanData();
65
  Alloc(Src.BufSize);
66
  if (Src.BufSize!=0)
67
    memcpy((void *)Buffer,(void *)Src.Buffer,Src.BufSize*sizeof(T));
68
}
69
70
71
template <class T> Array<T>::~Array()
72
410k
{
73
410k
  if (Buffer!=NULL)
74
355k
  {
75
355k
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
355k
    free(Buffer);
78
355k
  }
79
410k
}
Array<wchar_t>::~Array()
Line
Count
Source
72
24.5k
{
73
24.5k
  if (Buffer!=NULL)
74
8.44k
  {
75
8.44k
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
8.44k
    free(Buffer);
78
8.44k
  }
79
24.5k
}
Array<long>::~Array()
Line
Count
Source
72
4.09k
{
73
4.09k
  if (Buffer!=NULL)
74
0
  {
75
0
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
0
    free(Buffer);
78
0
  }
79
4.09k
}
Array<unsigned char>::~Array()
Line
Count
Source
72
361k
{
73
361k
  if (Buffer!=NULL)
74
341k
  {
75
341k
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
341k
    free(Buffer);
78
341k
  }
79
361k
}
Array<char>::~Array()
Line
Count
Source
72
3.72k
{
73
3.72k
  if (Buffer!=NULL)
74
3.72k
  {
75
3.72k
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
3.72k
    free(Buffer);
78
3.72k
  }
79
3.72k
}
Array<UnpackFilter>::~Array()
Line
Count
Source
72
4.29k
{
73
4.29k
  if (Buffer!=NULL)
74
640
  {
75
640
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
640
    free(Buffer);
78
640
  }
79
4.29k
}
Array<UnpackFilter30*>::~Array()
Line
Count
Source
72
8.58k
{
73
8.58k
  if (Buffer!=NULL)
74
842
  {
75
842
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
842
    free(Buffer);
78
842
  }
79
8.58k
}
Array<int>::~Array()
Line
Count
Source
72
4.29k
{
73
4.29k
  if (Buffer!=NULL)
74
421
  {
75
421
    if (Secure)
76
0
      cleandata(Buffer,AllocSize*sizeof(T));
77
421
    free(Buffer);
78
421
  }
79
4.29k
}
80
81
82
template <class T> inline T& Array<T>::operator [](size_t Item) const
83
795M
{
84
795M
  return Buffer[Item];
85
795M
}
Array<unsigned char>::operator[](unsigned long) const
Line
Count
Source
83
11.6M
{
84
11.6M
  return Buffer[Item];
85
11.6M
}
Array<char>::operator[](unsigned long) const
Line
Count
Source
83
6.99M
{
84
6.99M
  return Buffer[Item];
85
6.99M
}
Array<UnpackFilter30*>::operator[](unsigned long) const
Line
Count
Source
83
773M
{
84
773M
  return Buffer[Item];
85
773M
}
Array<int>::operator[](unsigned long) const
Line
Count
Source
83
119k
{
84
119k
  return Buffer[Item];
85
119k
}
Array<UnpackFilter>::operator[](unsigned long) const
Line
Count
Source
83
3.54M
{
84
3.54M
  return Buffer[Item];
85
3.54M
}
Array<wchar_t>::operator[](unsigned long) const
Line
Count
Source
83
160k
{
84
160k
  return Buffer[Item];
85
160k
}
Unexecuted instantiation: Array<unsigned int>::operator[](unsigned long) const
86
87
88
template <class T> inline T* Array<T>::operator +(size_t Pos)
89
0
{
90
0
  return Buffer+Pos;
91
0
}
92
93
94
template <class T> inline size_t Array<T>::Size()
95
262M
{
96
262M
  return BufSize;
97
262M
}
Array<wchar_t>::Size()
Line
Count
Source
95
312k
{
96
312k
  return BufSize;
97
312k
}
Array<unsigned char>::Size()
Line
Count
Source
95
52.0k
{
96
52.0k
  return BufSize;
97
52.0k
}
Array<char>::Size()
Line
Count
Source
95
3.72k
{
96
3.72k
  return BufSize;
97
3.72k
}
Array<UnpackFilter30*>::Size()
Line
Count
Source
95
258M
{
96
258M
  return BufSize;
97
258M
}
Array<int>::Size()
Line
Count
Source
95
220k
{
96
220k
  return BufSize;
97
220k
}
Array<UnpackFilter>::Size()
Line
Count
Source
95
2.89M
{
96
2.89M
  return BufSize;
97
2.89M
}
Unexecuted instantiation: Array<unsigned int>::Size()
98
99
100
template <class T> void Array<T>::Add(size_t Items)
101
958k
{
102
958k
  BufSize+=Items;
103
958k
  if (BufSize>AllocSize)
104
377k
  {
105
377k
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
377k
    size_t Suggested=AllocSize+AllocSize/4+32;
112
377k
    size_t NewSize=Max(BufSize,Suggested);
113
114
377k
    T *NewBuffer;
115
377k
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
377k
    else
128
377k
    {
129
377k
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
377k
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
377k
    }
133
377k
    Buffer=NewBuffer;
134
377k
    AllocSize=NewSize;
135
377k
  }
136
958k
}
Array<unsigned char>::Add(unsigned long)
Line
Count
Source
101
364k
{
102
364k
  BufSize+=Items;
103
364k
  if (BufSize>AllocSize)
104
360k
  {
105
360k
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
360k
    size_t Suggested=AllocSize+AllocSize/4+32;
112
360k
    size_t NewSize=Max(BufSize,Suggested);
113
114
360k
    T *NewBuffer;
115
360k
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
360k
    else
128
360k
    {
129
360k
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
360k
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
360k
    }
133
360k
    Buffer=NewBuffer;
134
360k
    AllocSize=NewSize;
135
360k
  }
136
364k
}
Array<char>::Add(unsigned long)
Line
Count
Source
101
3.72k
{
102
3.72k
  BufSize+=Items;
103
3.72k
  if (BufSize>AllocSize)
104
3.72k
  {
105
3.72k
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
3.72k
    size_t Suggested=AllocSize+AllocSize/4+32;
112
3.72k
    size_t NewSize=Max(BufSize,Suggested);
113
114
3.72k
    T *NewBuffer;
115
3.72k
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
3.72k
    else
128
3.72k
    {
129
3.72k
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
3.72k
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
3.72k
    }
133
3.72k
    Buffer=NewBuffer;
134
3.72k
    AllocSize=NewSize;
135
3.72k
  }
136
3.72k
}
Array<UnpackFilter30*>::Add(unsigned long)
Line
Count
Source
101
119k
{
102
119k
  BufSize+=Items;
103
119k
  if (BufSize>AllocSize)
104
1.51k
  {
105
1.51k
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
1.51k
    size_t Suggested=AllocSize+AllocSize/4+32;
112
1.51k
    size_t NewSize=Max(BufSize,Suggested);
113
114
1.51k
    T *NewBuffer;
115
1.51k
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
1.51k
    else
128
1.51k
    {
129
1.51k
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
1.51k
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
1.51k
    }
133
1.51k
    Buffer=NewBuffer;
134
1.51k
    AllocSize=NewSize;
135
1.51k
  }
136
119k
}
Array<int>::Add(unsigned long)
Line
Count
Source
101
2.49k
{
102
2.49k
  BufSize+=Items;
103
2.49k
  if (BufSize>AllocSize)
104
421
  {
105
421
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
421
    size_t Suggested=AllocSize+AllocSize/4+32;
112
421
    size_t NewSize=Max(BufSize,Suggested);
113
114
421
    T *NewBuffer;
115
421
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
421
    else
128
421
    {
129
421
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
421
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
421
    }
133
421
    Buffer=NewBuffer;
134
421
    AllocSize=NewSize;
135
421
  }
136
2.49k
}
Array<UnpackFilter>::Add(unsigned long)
Line
Count
Source
101
459k
{
102
459k
  BufSize+=Items;
103
459k
  if (BufSize>AllocSize)
104
2.45k
  {
105
2.45k
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
2.45k
    size_t Suggested=AllocSize+AllocSize/4+32;
112
2.45k
    size_t NewSize=Max(BufSize,Suggested);
113
114
2.45k
    T *NewBuffer;
115
2.45k
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
2.45k
    else
128
2.45k
    {
129
2.45k
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
2.45k
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
2.45k
    }
133
2.45k
    Buffer=NewBuffer;
134
2.45k
    AllocSize=NewSize;
135
2.45k
  }
136
459k
}
Array<wchar_t>::Add(unsigned long)
Line
Count
Source
101
8.44k
{
102
8.44k
  BufSize+=Items;
103
8.44k
  if (BufSize>AllocSize)
104
8.44k
  {
105
8.44k
    if (MaxSize!=0 && BufSize>MaxSize)
106
0
    {
107
0
      ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize);
108
0
      ErrHandler.MemoryError();
109
0
    }
110
111
8.44k
    size_t Suggested=AllocSize+AllocSize/4+32;
112
8.44k
    size_t NewSize=Max(BufSize,Suggested);
113
114
8.44k
    T *NewBuffer;
115
8.44k
    if (Secure)
116
0
    {
117
0
      NewBuffer=(T *)malloc(NewSize*sizeof(T));
118
0
      if (NewBuffer==NULL)
119
0
        ErrHandler.MemoryError();
120
0
      if (Buffer!=NULL)
121
0
      {
122
0
        memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
123
0
        cleandata(Buffer,AllocSize*sizeof(T));
124
0
        free(Buffer);
125
0
      }
126
0
    }
127
8.44k
    else
128
8.44k
    {
129
8.44k
      NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
130
8.44k
      if (NewBuffer==NULL)
131
0
        ErrHandler.MemoryError();
132
8.44k
    }
133
8.44k
    Buffer=NewBuffer;
134
8.44k
    AllocSize=NewSize;
135
8.44k
  }
136
8.44k
}
Unexecuted instantiation: Array<unsigned int>::Add(unsigned long)
137
138
139
template <class T> void Array<T>::Alloc(size_t Items)
140
167k
{
141
167k
  if (Items>AllocSize)
142
2.20k
    Add(Items-BufSize);
143
165k
  else
144
165k
    BufSize=Items;
145
167k
}
Array<unsigned char>::Alloc(unsigned long)
Line
Count
Source
140
166k
{
141
166k
  if (Items>AllocSize)
142
1.95k
    Add(Items-BufSize);
143
164k
  else
144
164k
    BufSize=Items;
145
166k
}
Array<UnpackFilter>::Alloc(unsigned long)
Line
Count
Source
140
664
{
141
664
  if (Items>AllocSize)
142
0
    Add(Items-BufSize);
143
664
  else
144
664
    BufSize=Items;
145
664
}
Array<wchar_t>::Alloc(unsigned long)
Line
Count
Source
140
504
{
141
504
  if (Items>AllocSize)
142
252
    Add(Items-BufSize);
143
252
  else
144
252
    BufSize=Items;
145
504
}
146
147
148
template <class T> void Array<T>::Reset()
149
45.0k
{
150
45.0k
  if (Buffer!=NULL)
151
0
  {
152
0
    free(Buffer);
153
0
    Buffer=NULL;
154
0
  }
155
45.0k
  BufSize=0;
156
45.0k
  AllocSize=0;
157
45.0k
}
Array<long>::Reset()
Line
Count
Source
149
4.09k
{
150
4.09k
  if (Buffer!=NULL)
151
0
  {
152
0
    free(Buffer);
153
0
    Buffer=NULL;
154
0
  }
155
4.09k
  BufSize=0;
156
4.09k
  AllocSize=0;
157
4.09k
}
Array<wchar_t>::Reset()
Line
Count
Source
149
40.9k
{
150
40.9k
  if (Buffer!=NULL)
151
0
  {
152
0
    free(Buffer);
153
0
    Buffer=NULL;
154
0
  }
155
40.9k
  BufSize=0;
156
40.9k
  AllocSize=0;
157
40.9k
}
Unexecuted instantiation: Array<unsigned char>::Reset()
158
159
160
// Reset buffer size, but preserve already allocated memory if any,
161
// so we can reuse it without wasting time to allocation.
162
template <class T> void Array<T>::SoftReset()
163
218k
{
164
218k
  BufSize=0;
165
218k
}
Array<int>::SoftReset()
Line
Count
Source
163
13.8k
{
164
13.8k
  BufSize=0;
165
13.8k
}
Array<UnpackFilter30*>::SoftReset()
Line
Count
Source
163
27.7k
{
164
27.7k
  BufSize=0;
165
27.7k
}
Array<UnpackFilter>::SoftReset()
Line
Count
Source
163
7.57k
{
164
7.57k
  BufSize=0;
165
7.57k
}
Array<unsigned char>::SoftReset()
Line
Count
Source
163
169k
{
164
169k
  BufSize=0;
165
169k
}
166
167
168
template <class T> void Array<T>::operator =(Array<T> &Src)
169
0
{
170
0
  Reset();
171
0
  Alloc(Src.BufSize);
172
0
  if (Src.BufSize!=0)
173
0
    memcpy((void *)Buffer,(void *)Src.Buffer,Src.BufSize*sizeof(T));
174
0
}
175
176
177
template <class T> void Array<T>::Push(T Item)
178
462k
{
179
462k
  Add(1);
180
462k
  (*this)[Size()-1]=Item;
181
462k
}
Array<int>::Push(int)
Line
Count
Source
178
2.49k
{
179
2.49k
  Add(1);
180
2.49k
  (*this)[Size()-1]=Item;
181
2.49k
}
Array<UnpackFilter>::Push(UnpackFilter)
Line
Count
Source
178
459k
{
179
459k
  Add(1);
180
459k
  (*this)[Size()-1]=Item;
181
459k
}
Array<unsigned char>::Push(unsigned char)
Line
Count
Source
178
54
{
179
54
  Add(1);
180
54
  (*this)[Size()-1]=Item;
181
54
}
Unexecuted instantiation: Array<unsigned int>::Push(unsigned int)
182
183
184
template <class T> void Array<T>::Append(T *Items,size_t Count)
185
{
186
  size_t CurSize=Size();
187
  Add(Count);
188
  memcpy(Buffer+CurSize,Items,Count*sizeof(T));
189
}
190
191
#endif