5#ifndef V8_BASE_VECTOR_H_
6#define V8_BASE_VECTOR_H_
32 DCHECK(length == 0 || data !=
nullptr);
53 std::copy(other.begin(), other.end(),
begin());
56 template <
class U,
size_t n>
59 std::copy(other.begin(), other.end(),
begin());
66 return static_cast<int>(
length_);
106 constexpr std::reverse_iterator<T*>
rbegin()
const {
107 return std::make_reverse_iterator(
end());
109 constexpr std::reverse_iterator<T*>
rend()
const {
110 return std::make_reverse_iterator(
begin());
150 template <
typename U>
151 requires std::is_convertible_v<T*, const U*> && (
sizeof(U) ==
sizeof(
T))
156 template <
typename S>
160 static_assert(std::is_trivial_v<S> && std::is_standard_layout_v<S>);
161 static_assert(std::is_trivial_v<T> && std::is_standard_layout_v<T>);
162 DCHECK_EQ(0, (input.size() *
sizeof(S)) %
sizeof(T));
163 DCHECK_EQ(0,
reinterpret_cast<uintptr_t
>(input.begin()) %
alignof(T));
164 return Vector<T>(
reinterpret_cast<T*
>(input.begin()),
165 input.size() *
sizeof(S) /
sizeof(T));
169 return std::equal(
begin(),
end(), other.begin(), other.end());
176 template <
typename TT = T>
177 requires(!std::is_const_v<TT>)
179 return std::equal(
begin(),
end(), other.begin(), other.end());
182 template <
typename TT = T>
183 requires(!std::is_const_v<TT>)
228 template <
typename U>
229 requires std::is_convertible_v<std::unique_ptr<U>, std::unique_ptr<T>>
231 *
this = std::move(other);
234 template <
typename U>
235 requires std::is_convertible_v<std::unique_ptr<U>, std::unique_ptr<T>>
237 static_assert(
sizeof(U) ==
sizeof(
T));
238 data_ = std::move(other.data_);
262 constexpr std::reverse_iterator<T*>
rbegin()
const {
263 return std::make_reverse_iterator(
end());
265 constexpr std::reverse_iterator<T*>
rend()
const {
266 return std::make_reverse_iterator(
begin());
282 return std::move(
data_);
288 if (size == 0)
return {};
295 if (size == 0)
return {};
296 return OwnedVector<T>(std::make_unique_for_overwrite<T[]>(size), size);
302 template <
typename U>
305 std::copy(data, data + size,
result.begin());
313 template <
typename U>
327 return {array, N - 1};
332 return {
data, strlen(data)};
338 return {
reinterpret_cast<const uint8_t*
>(
data), length};
353template <
typename T,
size_t N>
361 return {
start, size};
366template <
typename Container>
368 ->
decltype(
VectorOf(std::data(c), std::size(c))) {
369 return VectorOf(std::data(c), std::size(c));
377 return VectorOf(list.begin(), list.size());
390template <
typename Container>
392 ->
decltype(
OwnedCopyOf(std::data(c), std::size(c))) {
396template <
typename T,
size_t kSize>
401 std::fill_n(
buffer_, kSize, initial_value);
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
EmbeddedVector & operator=(const EmbeddedVector &)=delete
EmbeddedVector(const EmbeddedVector &)=delete
EmbeddedVector(const T &initial_value)
constexpr T * begin() const
constexpr bool empty() const
constexpr size_t size() const
bool operator==(std::nullptr_t) const
static OwnedVector< T > New(size_t size)
static OwnedVector< U > NewByCopying(const U *data, size_t size)
std::unique_ptr< T[]> ReleaseData()
OwnedVector(OwnedVector< U > &&other) V8_NOEXCEPT
std::unique_ptr< T[]> data_
OwnedVector(const OwnedVector &)=delete
T & operator[](size_t index) const
OwnedVector(std::unique_ptr< T[]> data, size_t length)
OwnedVector & operator=(const OwnedVector &)=delete
constexpr std::reverse_iterator< T * > rbegin() const
constexpr T * end() const
bool operator!=(std::nullptr_t) const
constexpr T * data() const
constexpr std::reverse_iterator< T * > rend() const
Vector< T > as_vector() const
OwnedVector & operator=(OwnedVector< U > &&other) V8_NOEXCEPT
static OwnedVector< T > NewForOverwrite(size_t size)
DISALLOW_IMPLICIT_CONSTRUCTORS(ScopedVector)
ScopedVector(size_t length)
void OverwriteWith(Vector< U > other)
Vector< T > Clone() const
T & operator[](size_t index) const
Vector< T > SubVector(size_t from, size_t to) const
bool operator!=(const Vector< T > &other) const
constexpr std::reverse_iterator< T * > rend() const
bool operator==(const Vector< T > &other) const
Vector< T > operator+=(size_t offset)
constexpr bool empty() const
constexpr Vector(T *data, size_t length)
Vector< T > operator+(size_t offset)
void Truncate(size_t length)
constexpr size_t size() const
const T & at(size_t index) const
Vector< T > SubVectorFrom(size_t from) const
void OverwriteWith(const std::array< U, n > &other)
static Vector< T > New(size_t length)
constexpr std::reverse_iterator< T * > rbegin() const
constexpr const T * cend() const
constexpr T * begin() const
constexpr T * data() const
static Vector< T > cast(Vector< S > input)
constexpr const T * cbegin() const
constexpr T * end() const
ZoneVector< RpoNumber > & result
V8_INLINE size_t hash_value(unsigned int v)
V8_INLINE size_t hash_range(Iterator first, Iterator last)
constexpr Vector< T > ArrayVector(T(&arr)[N])
Vector< const uint8_t > StaticOneByteVector(const char(&array)[N])
constexpr Vector< const char > StaticCharVector(const char(&array)[N])
constexpr Vector< T > VectorOf(T *start, size_t size)
Vector< const char > CStrVector(const char *data)
OwnedVector< T > OwnedCopyOf(const T *data, size_t size)
Vector< const uint8_t > OneByteVector(const char *data, size_t length)
#define DCHECK_LE(v1, v2)
#define CHECK_GE(lhs, rhs)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)