ATLAS Offline Software
Loading...
Searching...
No Matches
TrigCompositeUtils/TrigCompositeUtils/Combinators.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
6#ifndef TRIGCOMPOSITEUTILS_COMBINATORS_H
7#define TRIGCOMPOSITEUTILS_COMBINATORS_H
8
9#include <vector>
10#include <set>
11#include <functional>
12
13namespace HLT {
19 public:
23 CombinationGenerator( const std::initializer_list<size_t>& collectionSizes );
24 void add( size_t nextColl) { m_maxes.push_back( nextColl ); reset(); }
25 void reset();
26 size_t size() const { return m_maxes.size(); }
30 const std::vector<size_t>& operator()() const { return m_current; }
31 const std::vector<size_t>& current() const { return m_current; }
32
36 void operator++();
37
41 operator bool() const;
42 private:
43 std::vector<size_t> m_maxes;
44 std::vector<size_t> m_current;
45 };
46
52 public:
53 UniqueCombinationGenerator( size_t nelems, size_t comblen);
54 void reset();
55 size_t size() const { return m_combLen; }
56 const std::vector<size_t>& operator()() const { return current(); }
57 const std::vector<size_t>& current() const { return m_current; }
58
59 void operator++();
60 operator bool() const;
61 private:
63 size_t m_combLen;
64 std::vector<size_t> m_current;
65 std::vector<bool> m_bitmask;
66 };
67
73 public:
74 void add( const UniqueCombinationGenerator& gen );
75 void reset();
76 size_t size() const;
77 const std::vector<size_t>& operator()() const { return current(); }
78 const std::vector<size_t>& current() const { return m_current; }
79
80 void operator++();
81 operator bool() const;
82
83
84 private:
85 std::vector<UniqueCombinationGenerator> m_generators;
86 std::vector<size_t> m_current;
87 void cache();
88 };
89
101 template<typename ... Collections>
103 public:
104
105 CombinationIterator( Collections ... coll);
107
108 template<typename ... Iterators>
109 void operator()( Iterators ... iter ) const;
110
111 void reset() { }
115 operator bool() const;
116
120 void operator++();
121 private:
123 };
124
125
139 typedef std::vector<size_t> Index1DVec;
140 typedef std::vector< Index1DVec > Index2DVec;
141
142 void elementsInUniqueCombinations( const Index2DVec& indices, std::set<size_t>& participants, const std::function<bool(const Index1DVec&)>& filter = [](const Index1DVec&){ return true; } );
143
149 void findUniqueCombinations( const Index2DVec& indices, std::vector<std::vector<size_t> >& combinations, const std::function<bool(const Index1DVec&)>& filter = [](const Index1DVec&){ return true; } );
150
151
152
153}
154
155#endif // DECISIONHANDLING_COMBINATORS_H
CombinationGenerator(const std::initializer_list< size_t > &collectionSizes)
construct combnations maker with the sizes of collection to which it should be applied
const std::vector< size_t > & operator()() const
returns current combination
void operator++()
moves to the next combination
void operator()(Iterators ... iter) const
void operator++()
moves to the next combination
CombinationIterator(Collections ... coll)
An ensemble of UniqueCombinationGenerator API description.
void add(const UniqueCombinationGenerator &gen)
Generator of unique combinations (no indices are repeated) API description.
UniqueCombinationGenerator(size_t nelems, size_t comblen)
It used to be useful piece of code for replacing actual SG with other store of similar functionality ...
void elementsInUniqueCombinations(const Index2DVec &indices, std::set< size_t > &participants, const std::function< bool(const Index1DVec &)> &filter)
std::vector< Index1DVec > Index2DVec
std::vector< size_t > Index1DVec
Unique combinations for case when one can not repeat the index (i.e.
void findUniqueCombinations(const Index2DVec &indices, std::vector< std::vector< size_t > > &combinations, const std::function< bool(const Index1DVec &)> &filter)
Creates unique combinations of elements.