97 bool Reserve(int64_t new_min_index, int64_t new_max_index) {
98 if (new_min_index > new_max_index) {
101 const uint64_t new_size = new_max_index - new_min_index + 1;
102 if (base_ !=
nullptr) {
103 if (new_min_index >= min_index_ && new_max_index <= max_index_) {
104 min_index_ = new_min_index;
105 max_index_ = new_max_index;
108 }
else if (new_min_index > min_index_ || new_max_index < max_index_) {
112 T* new_storage =
new T[new_size];
113 if (new_storage ==
nullptr) {
117 T*
const new_base = new_storage - new_min_index;
118 if (base_ !=
nullptr) {
119 T*
const destination = new_base + min_index_;
120 memcpy(destination, storage_.get(), size_ *
sizeof(*base_));
125 min_index_ = new_min_index;
126 max_index_ = new_max_index;
127 storage_.reset(new_storage);