| 98 | |
| 99 | |
| 100 | template <class T> void Array<T>::Add(size_t Items) |
| 101 | { |
| 102 | BufSize+=Items; |
| 103 | if (BufSize>AllocSize) |
| 104 | { |
| 105 | if (MaxSize!=0 && BufSize>MaxSize) |
| 106 | { |
| 107 | ErrHandler.GeneralErrMsg(L"Maximum allowed array size (%u) is exceeded",MaxSize); |
| 108 | ErrHandler.MemoryError(); |
| 109 | } |
| 110 | |
| 111 | size_t Suggested=AllocSize+AllocSize/4+32; |
| 112 | size_t NewSize=Max(BufSize,Suggested); |
| 113 | |
| 114 | T *NewBuffer; |
| 115 | if (Secure) |
| 116 | { |
| 117 | NewBuffer=(T *)malloc(NewSize*sizeof(T)); |
| 118 | if (NewBuffer==NULL) |
| 119 | ErrHandler.MemoryError(); |
| 120 | if (Buffer!=NULL) |
| 121 | { |
| 122 | memcpy(NewBuffer,Buffer,AllocSize*sizeof(T)); |
| 123 | cleandata(Buffer,AllocSize*sizeof(T)); |
| 124 | free(Buffer); |
| 125 | } |
| 126 | } |
| 127 | else |
| 128 | { |
| 129 | NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T)); |
| 130 | if (NewBuffer==NULL) |
| 131 | ErrHandler.MemoryError(); |
| 132 | } |
| 133 | Buffer=NewBuffer; |
| 134 | AllocSize=NewSize; |
| 135 | } |
| 136 | } |
| 137 | |
| 138 | |
| 139 | template <class T> void Array<T>::Alloc(size_t Items) |
no test coverage detected