The Gaudi Framework  master (594c33fa)
Gaudi::Functional::details::vector_of_const_< Container > Class Template Reference

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

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

Classes

class  iterator
 

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 >
void push_back (T &&container)
 
iterator begin () const
 
iterator end () const
 
size_type size () const
 
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v< X >, ref_tfront () const
 
template<typename X = Container>
std::enable_if_t< std::is_pointer_v< X >, ptr_tfront () const
 
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v< X >, ref_tback () const
 
template<typename X = Container>
std::enable_if_t< std::is_pointer_v< X >, ptr_tback () const
 
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v< X >, ref_toperator[] (size_type i) const
 
template<typename X = Container>
std::enable_if_t< std::is_pointer_v< X >, ptr_toperator[] (size_type i) const
 
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v< X >, ref_tat (size_type i) const
 
template<typename X = Container>
std::enable_if_t< std::is_pointer_v< X >, ptr_tat (size_type i) const
 
bool is_null (size_type i) const
 

Private Types

using val_t = std::add_const_t< std::remove_pointer_t< Container > >
 
using ptr_t = std::add_pointer_t< val_t >
 
using ref_t = std::add_lvalue_reference_t< val_t >
 
using ContainerVector = std::vector< std::conditional_t< is_range, std::remove_const_t< val_t >, ptr_t > >
 

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::details::vector_of_const_< Container >

Definition at line 290 of file details.h.

Member Typedef Documentation

◆ 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 296 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 294 of file details.h.

◆ ref_t

template<typename Container >
using Gaudi::Functional::details::vector_of_const_< Container >::ref_t = std::add_lvalue_reference_t<val_t>
private

Definition at line 295 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 301 of file details.h.

◆ val_t

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

Definition at line 293 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 300 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() [1/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v<X>, ref_t> Gaudi::Functional::details::vector_of_const_< Container >::at ( size_type  i) const
inline

Definition at line 376 of file details.h.

376  {
377  return *m_containers[i];
378  }

◆ at() [2/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<std::is_pointer_v<X>, ptr_t> Gaudi::Functional::details::vector_of_const_< Container >::at ( size_type  i) const
inline

Definition at line 380 of file details.h.

380  {
381  return m_containers[i];
382  }

◆ back() [1/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v<X>, ref_t> Gaudi::Functional::details::vector_of_const_< Container >::back ( ) const
inline

Definition at line 358 of file details.h.

358  {
359  return *m_containers.back();
360  }

◆ back() [2/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<std::is_pointer_v<X>, ptr_t> Gaudi::Functional::details::vector_of_const_< Container >::back ( ) const
inline

Definition at line 362 of file details.h.

362  {
363  return m_containers.back();
364  }

◆ begin()

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

Definition at line 344 of file details.h.

344 { return m_containers.begin(); }

◆ end()

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

Definition at line 345 of file details.h.

345 { return m_containers.end(); }

◆ front() [1/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v<X>, ref_t> Gaudi::Functional::details::vector_of_const_< Container >::front ( ) const
inline

Definition at line 349 of file details.h.

349  {
350  return *m_containers.front();
351  }

◆ front() [2/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<std::is_pointer_v<X>, ptr_t> Gaudi::Functional::details::vector_of_const_< Container >::front ( ) const
inline

Definition at line 353 of file details.h.

353  {
354  return m_containers.front();
355  }

◆ is_null()

template<typename Container >
bool Gaudi::Functional::details::vector_of_const_< Container >::is_null ( size_type  i) const
inline

Definition at line 384 of file details.h.

384 { return !m_containers[i]; }

◆ operator[]() [1/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<!std::is_pointer_v<X>, ref_t> Gaudi::Functional::details::vector_of_const_< Container >::operator[] ( size_type  i) const
inline

Definition at line 367 of file details.h.

367  {
368  return *m_containers[i];
369  }

◆ operator[]() [2/2]

template<typename Container >
template<typename X = Container>
std::enable_if_t<std::is_pointer_v<X>, ptr_t> Gaudi::Functional::details::vector_of_const_< Container >::operator[] ( size_type  i) const
inline

Definition at line 371 of file details.h.

371  {
372  return m_containers[i];
373  }

◆ push_back()

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

Definition at line 340 of file details.h.

340  {
341  details2::push_back( m_containers, std::forward<T>( container ),
342  std::bool_constant < is_pointer || is_range > {} );
343  } // note: does not copy its argument, so we're not really a container...

◆ reserve()

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

Definition at line 338 of file details.h.

338 { m_containers.reserve( size ); }

◆ size()

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

Definition at line 346 of file details.h.

346 { return m_containers.size(); }

Member Data Documentation

◆ is_pointer

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

Definition at line 291 of file details.h.

◆ is_range

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

Definition at line 292 of file details.h.

◆ m_containers

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

Definition at line 297 of file details.h.


The documentation for this class was generated from the following file:
Gaudi::Functional::details::details2::push_back
void push_back(Container &c, const Value &v, std::true_type)
Definition: details.h:250
std::vector::reserve
T reserve(T... args)
std::vector::size
T size(T... args)
Gaudi::Functional::details::vector_of_const_::m_containers
ContainerVector m_containers
Definition: details.h:297
std::vector::back
T back(T... args)
std::vector::front
T front(T... args)
std::vector::begin
T begin(T... args)
std::vector::end
T end(T... args)
Gaudi::Functional::details::vector_of_const_::size
size_type size() const
Definition: details.h:346