ATLAS Offline Software
Loading...
Searching...
No Matches
CombinationsIterator Class Reference

#include <CombinationsIterator.h>

Collaboration diagram for CombinationsIterator:

Public Types

using iterator_category = std::forward_iterator_tag
using difference_type = std::ptrdiff_t
using value_type = HypoJetVector
using reference = HypoJetVector&
using pointer = HypoJetVector*

Public Member Functions

 CombinationsIterator (std::size_t k, const HypoJetVector &input_vals, bool end=false)
 CombinationsIterator ()
reference operator* ()
pointer operator-> ()
CombinationsIteratoroperator++ ()
CombinationsIterator operator++ (int)
CombinationsIterator endIter () const

Private Attributes

CombinationsGenerator m_gen {0,0}
std::size_t m_k {0}
HypoJetVector m_input_vals
HypoJetVector m_vals
bool m_end {false}

Friends

std::ostream & operator<< (std::ostream &os, const CombinationsIterator &iter)
bool operator== (const CombinationsIterator &a, const CombinationsIterator &b)
bool operator!= (const CombinationsIterator &a, const CombinationsIterator &b)

Detailed Description

Definition at line 27 of file CombinationsIterator.h.

Member Typedef Documentation

◆ difference_type

using CombinationsIterator::difference_type = std::ptrdiff_t

Definition at line 31 of file CombinationsIterator.h.

◆ iterator_category

using CombinationsIterator::iterator_category = std::forward_iterator_tag

Definition at line 30 of file CombinationsIterator.h.

◆ pointer

◆ reference

◆ value_type

Constructor & Destructor Documentation

◆ CombinationsIterator() [1/2]

CombinationsIterator::CombinationsIterator ( std::size_t k,
const HypoJetVector & input_vals,
bool end = false )

Definition at line 25 of file CombinationsIterator.cxx.

27 :
28 m_gen{CombinationsGenerator(iv.size(), k)},
29 m_k{k},
30 m_input_vals{iv},
31 m_end{end}
32{
33 auto indices = m_gen.get();
34 std::transform(indices.cbegin(),
35 indices.cend(),
36 std::back_inserter(m_vals),
37 [iv = this->m_input_vals](const auto& ind) {
38 return iv.at(ind);
39 });
40}
CombinationsGenerator m_gen
std::pair< long int, long int > indices

◆ CombinationsIterator() [2/2]

CombinationsIterator::CombinationsIterator ( )
inline

Definition at line 42 of file CombinationsIterator.h.

42{}

Member Function Documentation

◆ endIter()

CombinationsIterator CombinationsIterator::endIter ( ) const

Definition at line 43 of file CombinationsIterator.cxx.

◆ operator*()

reference CombinationsIterator::operator* ( )
inline

Definition at line 45 of file CombinationsIterator.h.

45{return m_vals;}

◆ operator++() [1/2]

CombinationsIterator & CombinationsIterator::operator++ ( )
inline

Definition at line 51 of file CombinationsIterator.h.

51 {
52 m_end = m_gen.bump();
53 auto indices = m_gen.get();
54
55 // overwrite m_vals according to the combinations indicies
56 std::transform(indices.cbegin(),
57 indices.cend(),
58 m_vals.begin(),
59 [iv = this->m_input_vals](const auto& ind) {
60 return iv.at(ind);
61 });
62
63 return *this;
64 }

◆ operator++() [2/2]

CombinationsIterator CombinationsIterator::operator++ ( int )
inline

Definition at line 67 of file CombinationsIterator.h.

67 {
69 ++(*this);
70 return tmp;
71 }
CombinationsIterator(std::size_t k, const HypoJetVector &input_vals, bool end=false)

◆ operator->()

pointer CombinationsIterator::operator-> ( )
inline

Definition at line 48 of file CombinationsIterator.h.

48{return &m_vals;}

◆ operator!=

bool operator!= ( const CombinationsIterator & a,
const CombinationsIterator & b )
friend

Definition at line 89 of file CombinationsIterator.h.

90 {
91 return !(a==b);
92 }
static Double_t a

◆ operator<<

std::ostream & operator<< ( std::ostream & os,
const CombinationsIterator & iter )
friend

Definition at line 7 of file CombinationsIterator.cxx.

7 {
8 os << std::boolalpha
9 << " generator: " << iter.m_gen
10 << " end: " << iter.m_end
11 << " input vals: ";
12 for(const auto& hj : iter.m_input_vals) {
13 os << static_cast<const void*>(hj.get()) << '\n';
14 }
15
16 os << '\n' <<" vals: ";
17
18 for(const auto& hj : iter.m_vals) {
19 os << static_cast<const void*>(hj.get()) << '\n';
20 }
21 os<<std::noboolalpha; //restore stream state
22 return os;
23}

◆ operator==

bool operator== ( const CombinationsIterator & a,
const CombinationsIterator & b )
friend

Definition at line 78 of file CombinationsIterator.h.

79 {
80 return a.m_end == b.m_end and
81 a.m_k == b.m_k and
82 a.m_input_vals == b.m_input_vals;
83
84
85 }

Member Data Documentation

◆ m_end

bool CombinationsIterator::m_end {false}
private

Definition at line 102 of file CombinationsIterator.h.

102{false};

◆ m_gen

CombinationsGenerator CombinationsIterator::m_gen {0,0}
private

Definition at line 96 of file CombinationsIterator.h.

96{0,0};

◆ m_input_vals

HypoJetVector CombinationsIterator::m_input_vals
private

Definition at line 99 of file CombinationsIterator.h.

◆ m_k

std::size_t CombinationsIterator::m_k {0}
private

Definition at line 97 of file CombinationsIterator.h.

97{0};

◆ m_vals

HypoJetVector CombinationsIterator::m_vals
private

Definition at line 100 of file CombinationsIterator.h.


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