// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_CONTAINERS_VECTOR_BUFFER_H_ #define BASE_CONTAINERS_VECTOR_BUFFER_H_ #include <stdlib.h> #include <string.h> #include <type_traits> #include <utility> #include "base/check.h" #include "base/check_op.h" #include "base/compiler_specific.h" #include "base/containers/span.h" #include "base/containers/util.h" #include "base/memory/raw_ptr_exclusion.h" #include "base/numerics/checked_math.h" namespace base::internal { // Internal implementation detail of base/containers. // // Implements a vector-like buffer that holds a certain capacity of T. Unlike // std::vector, VectorBuffer never constructs or destructs its arguments, and // can't change sizes. But it does implement templates to assist in efficient // moving and destruction of those items manually. // // In particular, the destructor function does not iterate over the items if // there is no destructor. Moves should be implemented as a memcpy/memmove for // trivially copyable objects (POD) otherwise, it should be a std::move if // possible, and as a last resort it falls back to a copy. This behavior is // similar to std::vector. // // No special consideration is done for noexcept move constructors since // we compile without exceptions. // // The current API does not support moving overlapping ranges. template <typename T> class VectorBuffer { … }; } // namespace base::internal #endif // BASE_CONTAINERS_VECTOR_BUFFER_H_