+ // This last part is necessary to make sure that symbols are replaced in the
+ // trigger condition and domain merging expressions in a greedy manner.
+ // I.e. we need to make sure that if one symbol's string representation is
+ // contained inside another (string subset) that the longer symbol name is
+ // always first in the symbols list.
+ // This will work because the symbol table is traversed from first to last
+ // element and TString::ReplaceAll is used to replace the substrings inside
+ // the AliHLTGlobalTriggerComponent::GenerateTrigger method.
+ std::vector<AliHLTTriggerMenuSymbol*> orderedList;
+ for (Int_t i = 0; i < list.GetEntriesFast(); i++)
+ {
+ orderedList.push_back( static_cast<AliHLTTriggerMenuSymbol*>(list.UncheckedAt(i)) );
+ }
+ std::sort(orderedList.begin(), orderedList.end(), AliHLTCheckForContainment);
+ //std::sort(orderedList.begin(), orderedList.end());
+ // Now swap values around according to the orderedList.
+ for (Int_t i = 0; i < list.GetEntriesFast(); i++)
+ {
+ AliHLTTriggerMenuSymbol* target = static_cast<AliHLTTriggerMenuSymbol*>(list.UncheckedAt(i));
+ AliHLTTriggerMenuSymbol tmp = *target;
+ *target = *orderedList[i];
+ *orderedList[i] = tmp;
+ }
+