The Gaudi Framework  v41r0 (bdbe7744)
Loading...
Searching...
No Matches
Gaudi::Functional::vector_of_const_< Container > Class Template Reference

#include </builds/gaudi/Gaudi/GaudiFunctional/include/Gaudi/Functional/details.h>

Collaboration diagram for Gaudi::Functional::vector_of_const_< Container >:

Public Types

using value_type = std::conditional_t<is_pointer, ptr_t, val_t>
using size_type = typename ContainerVector::size_type

Public Member Functions

 vector_of_const_ ()=default
void reserve (size_type size)
template<typename T>
requires ( is_pointer || is_range )
void push_back (T &&container)
template<typename C = Container>
requires ( !std::is_pointer_v<C> && !details2::is_gaudi_range_v<C> )
void push_back (borrowed_value_t< C > &container)
template<typename C = Container>
requires ( !std::is_pointer_v<C> && !details2::is_gaudi_range_v<C> )
void push_back (borrowed_value_t< C > &&)=delete
auto begin () const
auto end () const
decltype(auto) front () const
decltype(auto) back () const
decltype(auto) operator[] (size_type i) const
decltype(auto) at (size_type i) const
size_type size () const

Private Types

template<typename C>
using borrowed_value_t = std::add_const_t<std::remove_pointer_t<C>>
using val_t = borrowed_value_t<Container>
using ptr_t = std::add_pointer_t<val_t>
using ContainerVector = std::vector<std::conditional_t<is_range, std::remove_const_t<val_t>, ptr_t>>

Static Private Member Functions

static constexpr decltype(auto) wrap (ContainerVector::const_reference t)
static constexpr auto wrap (ContainerVector::const_iterator i)

Private Attributes

ContainerVector m_containers

Static Private Attributes

static constexpr bool is_pointer = std::is_pointer_v<Container>
static constexpr bool is_range = details2::is_gaudi_range_v<Container>

Detailed Description

template<typename Container>
class Gaudi::Functional::vector_of_const_< Container >

Definition at line 304 of file details.h.

Member Typedef Documentation

◆ borrowed_value_t

template<typename Container>
template<typename C>
using Gaudi::Functional::details::vector_of_const_< Container >::borrowed_value_t = std::add_const_t<std::remove_pointer_t<C>>
private

Definition at line 308 of file details.h.

◆ ContainerVector

template<typename Container>
using Gaudi::Functional::details::vector_of_const_< Container >::ContainerVector = std::vector<std::conditional_t<is_range, std::remove_const_t<val_t>, ptr_t>>
private

Definition at line 312 of file details.h.

◆ ptr_t

template<typename Container>
using Gaudi::Functional::details::vector_of_const_< Container >::ptr_t = std::add_pointer_t<val_t>
private

Definition at line 311 of file details.h.

◆ size_type

template<typename Container>
using Gaudi::Functional::details::vector_of_const_< Container >::size_type = typename ContainerVector::size_type

Definition at line 332 of file details.h.

◆ val_t

template<typename Container>
using Gaudi::Functional::details::vector_of_const_< Container >::val_t = borrowed_value_t<Container>
private

Definition at line 310 of file details.h.

◆ value_type

template<typename Container>
using Gaudi::Functional::details::vector_of_const_< Container >::value_type = std::conditional_t<is_pointer, ptr_t, val_t>

Definition at line 331 of file details.h.

Constructor & Destructor Documentation

◆ vector_of_const_()

template<typename Container>
Gaudi::Functional::details::vector_of_const_< Container >::vector_of_const_ ( )
default

Member Function Documentation

◆ at()

template<typename Container>
decltype(auto) Gaudi::Functional::details::vector_of_const_< Container >::at ( size_type i) const
inline

Definition at line 356 of file details.h.

356{ return wrap( m_containers.at( i ) ); }
static constexpr decltype(auto) wrap(ContainerVector::const_reference t)
Definition details.h:315

◆ back()

template<typename Container>
decltype(auto) Gaudi::Functional::details::vector_of_const_< Container >::back ( ) const
inline

Definition at line 354 of file details.h.

354{ return wrap( m_containers.back() ); }

◆ begin()

template<typename Container>
auto Gaudi::Functional::details::vector_of_const_< Container >::begin ( ) const
inline

Definition at line 351 of file details.h.

351{ return wrap( m_containers.begin() ); }

◆ end()

template<typename Container>
auto Gaudi::Functional::details::vector_of_const_< Container >::end ( ) const
inline

Definition at line 352 of file details.h.

352{ return wrap( m_containers.end() ); }

◆ front()

template<typename Container>
decltype(auto) Gaudi::Functional::details::vector_of_const_< Container >::front ( ) const
inline

Definition at line 353 of file details.h.

353{ return wrap( m_containers.front() ); }

◆ operator[]()

template<typename Container>
decltype(auto) Gaudi::Functional::details::vector_of_const_< Container >::operator[] ( size_type i) const
inline

Definition at line 355 of file details.h.

355{ return wrap( m_containers[i] ); }

◆ push_back() [1/3]

template<typename Container>
template<typename C = Container>
requires ( !std::is_pointer_v<C> && !details2::is_gaudi_range_v<C> )
void Gaudi::Functional::details::vector_of_const_< Container >::push_back ( borrowed_value_t< C > && )
delete

◆ push_back() [2/3]

template<typename Container>
template<typename C = Container>
requires ( !std::is_pointer_v<C> && !details2::is_gaudi_range_v<C> )
void Gaudi::Functional::details::vector_of_const_< Container >::push_back ( borrowed_value_t< C > & container)
inline

Definition at line 343 of file details.h.

343 {
344 // note: does not copy its argument, so we're not really a container...
345 m_containers.push_back( &container );
346 }

◆ push_back() [3/3]

template<typename Container>
template<typename T>
requires ( is_pointer || is_range )
void Gaudi::Functional::details::vector_of_const_< Container >::push_back ( T && container)
inline

Definition at line 338 of file details.h.

338 {
339 m_containers.push_back( container );
340 }

◆ reserve()

template<typename Container>
void Gaudi::Functional::details::vector_of_const_< Container >::reserve ( size_type size)
inline

Definition at line 335 of file details.h.

335{ m_containers.reserve( size ); }

◆ size()

template<typename Container>
size_type Gaudi::Functional::details::vector_of_const_< Container >::size ( ) const
inline

Definition at line 357 of file details.h.

357{ return m_containers.size(); }

◆ wrap() [1/2]

template<typename Container>
constexpr auto Gaudi::Functional::details::vector_of_const_< Container >::wrap ( ContainerVector::const_iterator i)
inlinestaticconstexprprivate

Definition at line 322 of file details.h.

322 {
323 if constexpr ( is_pointer || is_range ) {
324 return i;
325 } else {
327 }
328 }
static constexpr bool is_range
Definition details.h:306
static constexpr bool is_pointer
Definition details.h:305

◆ wrap() [2/2]

template<typename Container>
constexpr decltype(auto) Gaudi::Functional::details::vector_of_const_< Container >::wrap ( ContainerVector::const_reference t)
inlinestaticconstexprprivate

Definition at line 315 of file details.h.

315 {
316 if constexpr ( is_pointer || is_range ) {
317 return t;
318 } else {
319 return *t;
320 }
321 }

Member Data Documentation

◆ is_pointer

template<typename Container>
bool Gaudi::Functional::details::vector_of_const_< Container >::is_pointer = std::is_pointer_v<Container>
staticconstexprprivate

Definition at line 305 of file details.h.

◆ is_range

template<typename Container>
bool Gaudi::Functional::details::vector_of_const_< Container >::is_range = details2::is_gaudi_range_v<Container>
staticconstexprprivate

Definition at line 306 of file details.h.

◆ m_containers

template<typename Container>
ContainerVector Gaudi::Functional::details::vector_of_const_< Container >::m_containers
private

Definition at line 313 of file details.h.


The documentation for this class was generated from the following file:
  • GaudiFunctional/include/Gaudi/Functional/details.h