proxygen
folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true > Class Template Reference

#include <Iterator.h>

Inheritance diagram for folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >:
folly::detail::emplace_iterator_base< Derived, EmplaceImpl, false >

Public Member Functions

template<typename... Args>
Derivedoperator= (std::pair< Args... > &args)
 
template<typename... Args>
Derivedoperator= (const std::pair< Args... > &args)
 
template<typename... Args>
Derivedoperator= (std::pair< Args... > &&args)
 
template<typename... Args>
Derivedoperator= (std::tuple< Args... > &args)
 
template<typename... Args>
Derivedoperator= (const std::tuple< Args... > &args)
 
template<typename... Args>
Derivedoperator= (std::tuple< Args... > &&args)
 
 emplace_iterator_base (const emplace_iterator_base &)=default
 
 emplace_iterator_base (emplace_iterator_base &&) noexcept=default
 
emplace_iterator_baseoperator= (emplace_iterator_base &)=default
 
emplace_iterator_baseoperator= (const emplace_iterator_base &)=default
 
emplace_iterator_baseoperator= (emplace_iterator_base &&) noexcept=default
 
- Public Member Functions inherited from folly::detail::emplace_iterator_base< Derived, EmplaceImpl, false >
template<typename T >
Derivedoperator= (T &&arg)
 
template<typename... Args>
Derivedoperator= (emplace_args< Args... > &args)
 
template<typename... Args>
Derivedoperator= (const emplace_args< Args... > &args)
 
template<typename... Args>
Derivedoperator= (emplace_args< Args... > &&args)
 
Derivedoperator* ()
 
Derivedoperator++ ()
 
Derivedoperator++ (int)
 
 emplace_iterator_base (const emplace_iterator_base &)=default
 
 emplace_iterator_base (emplace_iterator_base &&) noexcept=default
 
emplace_iterator_baseoperator= (emplace_iterator_base &)=default
 
emplace_iterator_baseoperator= (const emplace_iterator_base &)=default
 
emplace_iterator_baseoperator= (emplace_iterator_base &&) noexcept=default
 

Private Types

using Base = emplace_iterator_base< Derived, EmplaceImpl, false >
 

Additional Inherited Members

- Public Types inherited from folly::detail::emplace_iterator_base< Derived, EmplaceImpl, false >
using iterator_category = std::output_iterator_tag
 
using value_type = void
 
using difference_type = void
 
using pointer = void
 
using reference = void
 
using container_type = std::remove_reference_t< decltype(*EmplaceImpl::container)>
 
- Protected Member Functions inherited from folly::detail::emplace_iterator_base< Derived, EmplaceImpl, false >
template<typename Args , std::size_t... I>
DerivedunpackAndEmplace (Args &args, index_sequence< I... >)
 
template<typename Args , std::size_t... I>
DerivedunpackAndEmplace (const Args &args, index_sequence< I... >)
 
template<typename Args , std::size_t... I>
DerivedunpackAndEmplace (Args &&args, index_sequence< I... >)
 

Detailed Description

template<typename Derived, typename EmplaceImpl>
class folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >

Partial specialization of emplace_iterator_base with implicit unpacking enabled.

Uses inheritance rather than SFINAE. operator= requires a single argument, which makes it very tricky to use std::enable_if or similar.

Definition at line 311 of file Iterator.h.

Member Typedef Documentation

template<typename Derived , typename EmplaceImpl >
using folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::Base = emplace_iterator_base<Derived, EmplaceImpl, false>
private

Definition at line 314 of file Iterator.h.

Constructor & Destructor Documentation

template<typename Derived , typename EmplaceImpl >
folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::emplace_iterator_base ( const emplace_iterator_base< Derived, EmplaceImpl, true > &  )
default
template<typename Derived , typename EmplaceImpl >
folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::emplace_iterator_base ( emplace_iterator_base< Derived, EmplaceImpl, true > &&  )
defaultnoexcept

Member Function Documentation

template<typename Derived , typename EmplaceImpl >
template<typename... Args>
Derived& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( std::pair< Args... > &  args)
inline

Special output operator for arguments packed into a std::pair. Unpacks the pair and performs variadic call to container's emplace function.

Definition at line 325 of file Iterator.h.

References testing::Args().

325  {
326  return this->unpackAndEmplace(args, index_sequence_for<Args...>{});
327  }
Derived & unpackAndEmplace(Args &args, index_sequence< I... >)
Definition: Iterator.h:287
template<typename Derived , typename EmplaceImpl >
template<typename... Args>
Derived& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( const std::pair< Args... > &  args)
inline

Definition at line 329 of file Iterator.h.

References testing::Args().

329  {
330  return this->unpackAndEmplace(args, index_sequence_for<Args...>{});
331  }
Derived & unpackAndEmplace(Args &args, index_sequence< I... >)
Definition: Iterator.h:287
template<typename Derived , typename EmplaceImpl >
template<typename... Args>
Derived& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( std::pair< Args... > &&  args)
inline

Definition at line 333 of file Iterator.h.

References testing::Args(), and folly::gen::move.

333  {
334  return this->unpackAndEmplace(
335  std::move(args), index_sequence_for<Args...>{});
336  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
Derived & unpackAndEmplace(Args &args, index_sequence< I... >)
Definition: Iterator.h:287
template<typename Derived , typename EmplaceImpl >
template<typename... Args>
Derived& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( std::tuple< Args... > &  args)
inline

Special output operator for arguments packed into a std::tuple. Unpacks the tuple and performs variadic call to container's emplace function.

Definition at line 343 of file Iterator.h.

References testing::Args().

343  {
344  return this->unpackAndEmplace(args, index_sequence_for<Args...>{});
345  }
Derived & unpackAndEmplace(Args &args, index_sequence< I... >)
Definition: Iterator.h:287
template<typename Derived , typename EmplaceImpl >
template<typename... Args>
Derived& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( const std::tuple< Args... > &  args)
inline

Definition at line 347 of file Iterator.h.

References testing::Args().

347  {
348  return this->unpackAndEmplace(args, index_sequence_for<Args...>{});
349  }
Derived & unpackAndEmplace(Args &args, index_sequence< I... >)
Definition: Iterator.h:287
template<typename Derived , typename EmplaceImpl >
template<typename... Args>
Derived& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( std::tuple< Args... > &&  args)
inline

Definition at line 351 of file Iterator.h.

References folly::gen::move, and folly::pushmi::__adl::noexcept().

351  {
352  return this->unpackAndEmplace(
353  std::move(args), index_sequence_for<Args...>{});
354  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
Derived & unpackAndEmplace(Args &args, index_sequence< I... >)
Definition: Iterator.h:287
template<typename Derived , typename EmplaceImpl >
emplace_iterator_base& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( emplace_iterator_base< Derived, EmplaceImpl, true > &  )
default
template<typename Derived , typename EmplaceImpl >
emplace_iterator_base& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( const emplace_iterator_base< Derived, EmplaceImpl, true > &  )
default
template<typename Derived , typename EmplaceImpl >
emplace_iterator_base& folly::detail::emplace_iterator_base< Derived, EmplaceImpl, true >::operator= ( emplace_iterator_base< Derived, EmplaceImpl, true > &&  )
defaultnoexcept

The documentation for this class was generated from the following file: