18 #ifndef GRN_DAT_VECTOR_HPP_
19 #define GRN_DAT_VECTOR_HPP_
31 Vector() : buf_(NULL), size_(0), capacity_(0) {}
36 delete []
reinterpret_cast<char *
>(buf_);
59 return buf_[size() - 1];
63 return buf_[size() - 1];
73 const T *
end()
const {
82 new (&buf_[size()]) T;
87 new (&buf_[size()]) T(x);
102 if (new_size > capacity()) {
105 for (
UInt32 i = size();
i < new_size; ++
i) {
108 for (
UInt32 i = new_size;
i < size(); ++
i) {
113 template <
typename U>
115 if (new_size > capacity()) {
118 for (
UInt32 i = size();
i < new_size; ++
i) {
119 new (&buf_[
i]) T(value);
121 for (
UInt32 i = new_size;
i < size(); ++
i) {
128 if (new_capacity <= capacity()) {
130 }
else if ((new_capacity / 2) < capacity()) {
132 new_capacity = capacity() * 2;
138 T *new_buf =
reinterpret_cast<T *
>(
139 new (std::nothrow)
char[
sizeof(new_capacity) * new_capacity]);
143 new (&new_buf[
i]) T(buf_[
i]);
151 delete []
reinterpret_cast<char *
>(old_buf);
153 capacity_ = new_capacity;
157 T *
const temp_buf = buf_;
159 rhs->buf_ = temp_buf;
161 const UInt32 temp_size = size_;
163 rhs->size_ = temp_size;
165 const UInt32 temp_capacity = capacity_;
166 capacity_ = rhs->capacity_;
167 rhs->capacity_ = temp_capacity;
193 #endif // GRN_DAT_VECTOR_HPP_