19 std::ostream&
operator<<( std::ostream&
s,
const std::vector<T>&
v)
21 s<<
"[";
for(
auto i:
v){
s <<
i <<
", ";}
s <<
"]";
25 std::string TrigNavStructure::m_unspecifiedLabel =
"";
31 for (
auto& factory :
m_factory) factory.reset();
43 if ( factory.
empty() )
52 if ( not factory.
empty() )
80 std::vector<TriggerElement*>
list;
81 list.push_back(seednode);
93 for (
it = seeds.begin();
it != seeds.end(); ++
it ) {
111 for ( ; itbegin != itend; ++itbegin ) {
130 if ( te->
getId() ==
id )
132 std::vector<TriggerElement*>::const_iterator
it;
155 if ( initialNode == 0 )
165 if ( te == initialNode ) {
167 const std::vector< TriggerElement* >& allTEs = factory.
listOfProduced();
168 std::vector< TriggerElement* >::const_iterator allIt;
169 for (allIt = allTEs.begin(); allIt != allTEs.end(); ++allIt) {
183 ss <<
"id:" << dec << te->
getId() <<
";"
186 <<
"ptr:" << hex << te <<
";"
189 std::vector<TriggerElement*>::const_iterator seedIt;
209 for ( ;
it != itEnd; ++
it ) {
223 const std::vector<TriggerElement*>& fullList = factory.
listOfProduced();
224 std::vector<TriggerElement*>
all;
225 all.reserve(fullList.size());
227 for(std::vector<TriggerElement*>::const_iterator
iter = fullList.begin();
iter != fullList.end(); ++
iter) {
228 if(! (*iter)->transient() ) {
234 output.reserve(10*
all.size());
238 output.push_back(
all.size());
241 std::map<TriggerElement*, uint16_t>
keys;
244 std::vector<TriggerElement*>::const_iterator
it;
270 std::vector<uint32_t>::const_iterator& inputIt =
start;
271 const size_t payloadSize = *inputIt++;
274 std::cerr <<
"size of the navigation payload smaller than the one required to save TEs. " <<
totalSize <<
" < " << payloadSize << std::endl;
279 const unsigned int size = *inputIt++;
281 std::map<uint16_t, TriggerElement* >
keys;
283 for (
unsigned int i = 0;
i <
size; ++
i ) {
292 if ( not factory.
empty() ) {
295 std::vector<TriggerElement*>::const_iterator roiTEit;
315 std::vector<TriggerElement*>::const_iterator
it;
337 output.push_back( te );
343 std::vector< TriggerElement* >& output,
344 const bool activeOnly)
const {
349 std::back_insert_iterator<std::vector<TriggerElement*> > outputIt( output );
366 std::back_insert_iterator<std::vector<TriggerElement*> > outputIt( output );
415 std::vector<const TriggerElement*> vecRoINodes;
418 vecRoINodes.push_back(te1);
420 std::back_insert_iterator<std::vector<const TriggerElement*> > outputIt( vecRoINodes );
424 vecRoINodes.push_back(te2);
426 std::back_insert_iterator<std::vector<const TriggerElement*> > outputIt( vecRoINodes );
430 sort(vecRoINodes.begin(), vecRoINodes.end());
432 std::vector<const TriggerElement*>::const_iterator
it;
433 it = adjacent_find(vecRoINodes.begin(), vecRoINodes.end());
435 if (
it == vecRoINodes.end() )
448 std::vector<TriggerElement*> vecRoINodes1 =
getRoINodes(te1);
449 std::vector<TriggerElement*> vecRoINodes2 =
getRoINodes(te2);
450 sort(vecRoINodes1.begin(), vecRoINodes1.end());
451 sort(vecRoINodes2.begin(), vecRoINodes2.end());
452 return vecRoINodes1 == vecRoINodes2;
460 std::vector<const TriggerElement*> vecRoINodes;
461 std::back_insert_iterator<std::vector<const TriggerElement*> > outputIt( vecRoINodes );
470 sort(vecRoINodes.begin(), vecRoINodes.end());
473 it = adjacent_find(vecRoINodes.begin(), vecRoINodes.end());
474 if (
it == vecRoINodes.end() )
565 std::vector< TriggerElement* >::const_iterator
old = oldFactory.
listOfProduced().begin();
569 (*me)->setActiveState((*old)->getActiveState());
581 std::vector<std::vector<TriggerElement*> >& output,
582 unsigned int maxResults,
bool onlyActive)
587 std::vector< std::vector<TriggerElement*> > input;
588 std::vector< std::vector<std::pair<unsigned int, unsigned int> > > newIdxs;
593 std::vector< std::vector<TriggerElement*> > input = output;
594 std::vector< std::vector<std::pair<unsigned int, unsigned int> > > currentIdxs = newIdxs;
601 maxResults, onlyActive))
return false;
609 std::vector< std::vector<std::pair<unsigned int, unsigned int> > >& currentIdxs,
611 std::vector<std::vector<TriggerElement*> >& newCombs,
612 std::vector< std::vector<std::pair<unsigned int, unsigned int> > >& newIdxs,
613 unsigned int maxResults,
bool onlyActive)
616 std::vector<TriggerElement*> newTEs;
619 if (currentCombs.size() == 0) {
622 for (
unsigned int j = 0; j < newTEs.size(); j++) {
624 std::vector<TriggerElement*> cbs;
625 cbs.push_back(newTEs[j]);
626 newCombs.push_back(cbs);
629 std::vector<std::pair<unsigned int, unsigned int> > ti;
630 ti.push_back(std::pair<unsigned int, unsigned int>(
type, j));
631 newIdxs.push_back(ti);
637 for (
unsigned int i = 0;
i < currentCombs.size();
i++) {
640 std::vector<TriggerElement*>& comb = currentCombs[
i];
645 std::vector<std::pair<unsigned int, unsigned int> >& ti = currentIdxs[
i];
658 for (
unsigned int j = comb.size(); j > 0; j--)
660 first = ti[j - 1].second;
667 for (
unsigned int j =
first + 1; j < newTEs.size(); j++) {
678 newCombs.push_back(comb);
684 ti.push_back(std::pair<unsigned int, unsigned int>(
type, j));
685 newIdxs.push_back(ti);
689 if (maxResults > 0 && newCombs.size() >= maxResults) {
699 for (std::vector<TriggerElement*>::const_iterator te2 = teVec.begin(); te2 != teVec.end(); ++te2)
700 if (
overlaps(te1, *te2))
return true;
706 if (te1 == te2)
return true;
713 std::vector<const TriggerElement*>&
children,
const bool activeOnly )
const {
718 for (
unsigned i = 0 ;
i < types.size(); ++
i ) {
736 unsigned int n_features = 0;
738 for ( std::vector< TriggerElement::FeatureAccessHelper >::const_iterator
it = sourceTE->
getFeatureAccessHelpers().begin();
757 for (
auto& factory :
m_factory) factory.reset();
777 return holderstorage.
getLabel(clid,sti_or_label);
785 bool single =
true;
bool recursively =
false;
788 if(
status && !features.empty()){
789 return features.front();
799 bool single =
true;
bool recursively =
true;
802 if(
status && !features.empty()){
803 return features.front();
810 bool only_single_feature,
813 std::string& sourcelabel )
const {
821 for (
int it = ( only_single_feature ?
size-1 : 0 );
it != (only_single_feature ? -1 :
size ); only_single_feature ?
it--:
it++ ) {
826 sourcelabel =
label(clid,fea.getIndex().subTypeIndex());
828 features.push_back(fea);
832 if ( only_single_feature )
842 bool only_single_feature,
844 bool travel_backward_recursively,
846 std::string& sourcelabel )
const {
856 if ( ! travel_backward_recursively ) {
866 if ( ! features.empty() ) {
871 bool recursion_status =
true;
876 recursion_status = recursion_status &&
getFeatureAccessors( predecessor, clid, index_or_label,
877 only_single_feature, features_in_branch,
878 travel_backward_recursively,
880 features.insert(features.end(), features_in_branch.begin(), features_in_branch.end());
883 if ( only_single_feature && ( features.size() > 1 || recursion_status ==
false) ) {
898 if(fea.
getCLID() != clid)
return false;
900 if(index_or_label.index() == 0){
902 auto index = std::get<sub_index_type>(index_or_label) ;
906 if(index_or_label.index() == 1){
908 auto label = std::get<std::string>(index_or_label);
914 if(sub == invalid_sub_index)
return false;