Go to the documentation of this file.
52 #ifndef ABSL_TYPES_SPAN_H_
53 #define ABSL_TYPES_SPAN_H_
58 #include <initializer_list>
60 #include <type_traits>
63 #include "absl/base/internal/throw_delegate.h"
64 #include "absl/base/macros.h"
65 #include "absl/base/optimization.h"
66 #include "absl/base/port.h"
67 #include "absl/meta/type_traits.h"
68 #include "absl/types/internal/span.h"
151 template <
typename T>
156 template <
typename C>
162 template <
typename U>
167 template <
typename U>
198 template <
typename V,
typename = EnableIfConvertibleFrom<V>,
199 typename = EnableIfMutableView<V>>
204 template <
typename V,
typename = EnableIfConvertibleFrom<V>,
205 typename = EnableIfConstView<V>>
244 template <
typename LazyT =
T,
245 typename = EnableIfConstView<LazyT>>
246 Span(std::initializer_list<value_type>
v
248 :
Span(
v.begin(),
v.size()) {}
288 "Span::at failed bounds check"),
440 template <
typename H>
442 return H::combine(H::combine_contiguous(
std::move(h),
v.data(),
v.size()),
451 template <
typename T>
469 template <
typename T>
471 return span_internal::EqualImpl<Span, const T>(
a,
b);
473 template <
typename T>
475 return span_internal::EqualImpl<Span, const T>(a,
b);
477 template <
typename T>
479 return span_internal::EqualImpl<Span, const T>(a,
b);
482 typename T,
typename U,
483 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
485 return span_internal::EqualImpl<Span, const T>(
a,
b);
488 typename T,
typename U,
489 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
491 return span_internal::EqualImpl<Span, const T>(
a,
b);
495 template <
typename T>
499 template <
typename T>
503 template <
typename T>
508 typename T,
typename U,
509 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
514 typename T,
typename U,
515 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
521 template <
typename T>
523 return span_internal::LessThanImpl<Span, const T>(
a,
b);
525 template <
typename T>
527 return span_internal::LessThanImpl<Span, const T>(a,
b);
529 template <
typename T>
531 return span_internal::LessThanImpl<Span, const T>(a,
b);
534 typename T,
typename U,
535 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
537 return span_internal::LessThanImpl<Span, const T>(
a,
b);
540 typename T,
typename U,
541 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
543 return span_internal::LessThanImpl<Span, const T>(
a,
b);
547 template <
typename T>
551 template <
typename T>
555 template <
typename T>
560 typename T,
typename U,
561 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
566 typename T,
typename U,
567 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
573 template <
typename T>
577 template <
typename T>
581 template <
typename T>
586 typename T,
typename U,
587 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
592 typename T,
typename U,
593 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
599 template <
typename T>
603 template <
typename T>
607 template <
typename T>
612 typename T,
typename U,
613 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
618 typename T,
typename U,
619 typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>>
660 template <
int&... ExplicitArgumentBarrier,
typename T>
665 template <
int&... ExplicitArgumentBarrier,
typename T>
671 template <
int&... ExplicitArgumentBarrier,
typename C>
677 template <
int&... ExplicitArgumentBarrier,
typename T,
size_t N>
706 template <
int&... ExplicitArgumentBarrier,
typename T>
711 template <
int&... ExplicitArgumentBarrier,
typename T>
716 template <
int&... ExplicitArgumentBarrier,
typename C>
721 template <
int&... ExplicitArgumentBarrier,
typename T,
size_t N>
727 #endif // ABSL_TYPES_SPAN_H_
typename std::enable_if< std::is_const< const absl::str_format_internal::FormatArgImpl >::value, U >::type EnableIfConstView
const const absl::str_format_internal::FormatArgImpl * const_pointer
typename std::enable_if<!std::is_const< const absl::str_format_internal::FormatArgImpl >::value, U >::type EnableIfMutableView
typename std::remove_cv< T >::type remove_cv_t
static const size_type npos
constexpr reverse_iterator rbegin() const noexcept
constexpr size_t Min(size_t a, size_t b) noexcept
constexpr Span(pointer array, size_type length) noexcept
std::is_integral< absl::decay_t< decltype(std::declval< C & >().size())> > HasSize
typename std::enable_if< span_internal::HasData< T, C >::value &&span_internal::HasSize< C >::value >::type EnableIfConvertibleFrom
constexpr const_reverse_iterator crend() const noexcept
#define ABSL_NAMESPACE_END
constexpr bool empty() const noexcept
bool operator>(const absl::InlinedVector< T, N, A > &a, const absl::InlinedVector< T, N, A > &b)
constexpr reference back() const noexcept
#define ABSL_HARDENING_ASSERT(expr)
#define T(upbtypeconst, upbtype, ctype, default_value)
const const absl::str_format_internal::FormatArgImpl & const_reference
friend H AbslHashValue(H h, Span v)
void ThrowStdOutOfRange(const std::string &what_arg)
#define ABSL_NAMESPACE_BEGIN
void remove_suffix(size_type n) noexcept
constexpr const_iterator cbegin() const noexcept
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
void remove_prefix(size_type n) noexcept
constexpr reference operator[](size_type i) const noexcept
bool operator==(const absl::InlinedVector< T, N, A > &a, const absl::InlinedVector< T, N, A > &b)
constexpr Span() noexcept
constexpr iterator end() const noexcept
ptrdiff_t difference_type
bool operator!=(const absl::InlinedVector< T, N, A > &a, const absl::InlinedVector< T, N, A > &b)
#define ABSL_PREDICT_TRUE(x)
constexpr iterator begin() const noexcept
constexpr Span last(size_type len) const
constexpr reverse_iterator rend() const noexcept
bool operator>=(const absl::InlinedVector< T, N, A > &a, const absl::InlinedVector< T, N, A > &b)
constexpr Span(const V &v) noexcept
bool operator<=(const absl::InlinedVector< T, N, A > &a, const absl::InlinedVector< T, N, A > &b)
constexpr size_type size() const noexcept
constexpr auto GetData(C &c) noexcept -> decltype(GetDataImpl(c, 0))
std::reverse_iterator< iterator > reverse_iterator
constexpr reference at(size_type i) const
constexpr Span first(size_type len) const
std::reverse_iterator< const_iterator > const_reverse_iterator
const_pointer const_iterator
constexpr const_iterator cend() const noexcept
Span(std::initializer_list< value_type > v ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept
absl::remove_cv_t< const absl::str_format_internal::FormatArgImpl > value_type
constexpr const_reverse_iterator crbegin() const noexcept
#define ABSL_ATTRIBUTE_LIFETIME_BOUND
bool operator<(const absl::InlinedVector< T, N, A > &a, const absl::InlinedVector< T, N, A > &b)
constexpr Span(T(&a)[N]) noexcept
constexpr Span subspan(size_type pos=0, size_type len=npos) const
constexpr Span< T > MakeSpan(T *ptr, size_t size) noexcept
constexpr pointer data() const noexcept
constexpr reference front() const noexcept
constexpr size_type length() const noexcept
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:14