Implement default string arguments.
1 /* vim: set ts=4 sw=4 tw=99 et:
3 * Copyright (C) 2012 David Anderson
5 * This file is part of SourcePawn.
7 * SourcePawn is free software: you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 3 of the License, or (at your option)
12 * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with
17 * SourcePawn. If not, see http://www.gnu.org/licenses/.
19 #ifndef _INCLUDE_KEIMA_TPL_CPP_VECTOR_H_
20 #define _INCLUDE_KEIMA_TPL_CPP_VECTOR_H_
24 #include "AllocatorPolicies.h"
29 template <typename T, typename AllocPolicy = ZoneAllocatorPolicy>
30 class Vector : public AllocPolicy
33 Vector(AllocPolicy = AllocPolicy())
39 for (size_t i = 0; i < nitems; i++)
43 bool append(const T& item) {
46 new (&data[nitems]) T(item);
51 T t = at(length() - 1);
57 data[nitems - 1].~T();
63 size_t length() const {
70 const T& at(size_t i) const {
74 T& operator [](size_t i) {
77 const T& operator [](size_t i) const {
89 bool GrowIfNeeded(size_t needed)
91 if (!IsUintPtrAddSafe(nitems, needed)) {
92 this->reportAllocationOverflow();
97 while (nitems + needed > maxsize)
99 if (!IsUintPtrMultiplySafe(maxsize, 2)) {
100 this->reportAllocationOverflow();
105 T* newdata = (T*)this->malloc(sizeof(T) * maxsize);
108 for (size_t i = 0; i < nitems; i++)
110 new (&newdata[i]) T(data[i]);
126 #endif /* _INCLUDE_KEIMA_TPL_CPP_VECTOR_H_ */