The ThOr combiners detect whether or not consecutive containers are 'identical' (contain the same particles in the same order) in order to be able to activate the 'triangle loop'. The triangle loop allows us to skip combinations which contain particles which have already entered the combination.
The v2 triangle loop detection just checks for input container pointer equality.
The v1 detection cannot do this because the v1 inputs are
Gaudi::NamedRange_, which are instantiated on-the-fly from container inputs (liked
std::vector). Because two identical containers are wrapped as two different
NamedRange_ instances, and we cannot access the underlying container, we cannot use 'range pointer' equality (we have two instances).
The current v1 detection just checks whether the first element of the two ranges is the same. This is can be trivially wrong, of course, and can result in segfaults (see Moore#300 (closed)).
This MR replaces the v1 detection logic with a simple
Gaudi::NamedRange_::operator== call. This is slower than a container-pointer equality check (O(n) vs. O(1)) but is robust, at least. Because we hope to replace all v1 combiners with v2 equivalents this is something we can likely live with for now.