#include <table.h>
Public Member Functions | |
void | ClearAll () |
size_t | count () const |
bool | empty () const |
template<typename F > | |
void | ForEach (F f) const |
template<typename T > | |
bool | has () const |
Table & | operator= (const Table &rhs) |
Table & | operator= (Table &&rhs) noexcept |
Table ()=default | |
Table (const Table &rhs) | |
Table (Table &&rhs) noexcept | |
template<size_t I> | |
absl::enable_if_t< I< sizeof...(Ts), bool > has() const { return present_bits_.is_set(I);} template< typename T > T *get() { return get< index_of< T >)>);} template< typename T > const T *get() const { return get< index_of< T >)>);} template< size_t I > TypeIndex< I > *get() { if(has< I >)) return element_ptr< I >);return nullptr;} template< size_t I > const TypeIndex< I > *get() const { if(has< I >)) return element_ptr< I >);return nullptr;} template< typename T > T *get_or_create() { return get_or_create< index_of< T >)>);} template< size_t I > TypeIndex< I > *get_or_create() { auto *p=element_ptr< I >);if(!set_present< I >true)) { new(p) TypeIndex< I >);} return element_ptr< I >);} template< typename T, typename... Args > T *set(Args &&... args) { return set< index_of< T >)>std::forward< Args >args)...);} template< size_t I, typename... Args > TypeIndex< I > *set(Args &&... args) { auto *p=element_ptr< I >);if(set_present< I >true)) { TypeIndex< I > replacement(std::forward< Args >args)...);*p=std::move(replacement);} else { new(p) TypeIndex< I >std::forward< Args >args)...);} return p;} template< size_t I > TypeIndex< I > *set(TypeIndex< I > &&value) { auto *p=element_ptr< I >);if(set_present< I >true)) { *p=std::forward< TypeIndex< I > >value);} else { new(p) TypeIndex< I >std::forward< TypeIndex< I > >value));} return p;} template< typename T > void clear() { clear< index_of< T >)>);} template< size_t I > void clear() { if(set_present< I >false)) { using T=TypeIndex< I >;element_ptr< I >) -> | ~T () |
~Table () | |
Private Types | |
using | Elements = table_detail::Elements< Ts... > |
template<size_t I> | |
using | GetElem = table_detail::GetElem< I, Ts... > |
using | PresentBits = BitSet< sizeof...(Ts)> |
template<size_t I> | |
using | TypeIndex = table_detail::TypeIndex< I, Ts... > |
Private Member Functions | |
template<size_t I, typename F > | |
void | CallIf (F *f) const |
template<size_t... I> | |
void | ClearAllImpl (absl::index_sequence< I... >) |
template<bool or_clear, size_t... I> | |
void | Copy (absl::index_sequence< I... >, const Table &rhs) |
template<bool or_clear, size_t I> | |
void | CopyIf (const Table &rhs) |
template<size_t... I> | |
void | Destruct (absl::index_sequence< I... >) |
template<size_t I> | |
TypeIndex< I > * | element_ptr () |
template<size_t I> | |
const TypeIndex< I > * | element_ptr () const |
template<typename F , size_t... I> | |
void | ForEachImpl (F f, absl::index_sequence< I... >) const |
template<bool or_clear, size_t... I> | |
void | Move (absl::index_sequence< I... >, Table &&rhs) |
template<bool or_clear, size_t I> | |
void | MoveIf (Table &&rhs) |
template<size_t I> | |
bool | set_present (bool value) |
Static Private Member Functions | |
template<typename T > | |
static constexpr size_t | index_of () |
Private Attributes | |
GPR_NO_UNIQUE_ADDRESS Elements | elements_ |
GPR_NO_UNIQUE_ADDRESS PresentBits | present_bits_ |
|
private |
|
private |
|
private |
|
private |
|
default |
|
inline |
|
inline |
|
inlinenoexcept |
absl::enable_if_t< I<sizeof...(Ts), bool> has() const { return present_bits_.is_set(I); } template <typename T> T* get() { return get<index_of<T>)>); } template <typename T> const T* get() const { return get<index_of<T>)>); } template <size_t I> TypeIndex<I>* get() { if (has<I>)) return element_ptr<I>); return nullptr; } template <size_t I> const TypeIndex<I>* get() const { if (has<I>)) return element_ptr<I>); return nullptr; } template <typename T> T* get_or_create() { return get_or_create<index_of<T>)>); } template <size_t I> TypeIndex<I>* get_or_create() { auto* p = element_ptr<I>); if (!set_present<I>true)) { new (p) TypeIndex<I>); } return element_ptr<I>); } template <typename T, typename... Args> T* set(Args&&... args) { return set<index_of<T>)>std::forward<Args>args)...); } template <size_t I, typename... Args> TypeIndex<I>* set(Args&&... args) { auto* p = element_ptr<I>); if (set_present<I>true)) { TypeIndex<I> replacement(std::forward<Args>args)...); *p = std::move(replacement); } else { new (p) TypeIndex<I>std::forward<Args>args)...); } return p; } template <size_t I> TypeIndex<I>* set(TypeIndex<I>&& value) { auto* p = element_ptr<I>); if (set_present<I>true)) { *p = std::forward<TypeIndex<I> >value); } else { new (p) TypeIndex<I>std::forward<TypeIndex<I> >value)); } return p; } template <typename T> void clear() { clear<index_of<T>)>); } template <size_t I> void clear() { if (set_present<I>false)) { using T = TypeIndex<I>; element_ptr<I>)-> grpc_core::Table< Ts >::~T | ( | ) |
|
inlineprivate |
|
inline |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inline |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inline |
|
inline |
|
inlineprivate |
|
inlinestaticconstexprprivate |
|
inlineprivate |
|
inlineprivate |
|
inline |
|
inlinenoexcept |
|
inlineprivate |
|
private |
|
private |