in cpp/spectrum/core/matchers/RotateMatcher.cpp [20:47]
bool _matchesRotateRequirement(
const Rule::RotateSupport rotateSupport,
const spectrum::requirements::Rotate& rotateRequirement) {
const auto isRotationMultipleOf90 =
numeric::isMultipleOf90(rotateRequirement.degrees);
const auto isRotationMultipleOf180 =
numeric::isMultipleOf180(rotateRequirement.degrees);
switch (rotateSupport) {
case Rule::RotateSupport::None:
// Whether there's a forced rotation (assigned degrees or flip) or a
// potential rotation (forceUpOrientation) we exclude non-noop rotate
// requirements from rules that cannot rotate.
return rotateRequirement.noop();
case Rule::RotateSupport::MultipleOf90:
// Excluding forceUpOrientation as the orientation may derive from
// metadata which can be flipped.
return isRotationMultipleOf90 && !rotateRequirement.flip() &&
!rotateRequirement.forceUpOrientation;
case Rule::RotateSupport::MultipleOf180:
return isRotationMultipleOf180 && !rotateRequirement.flip() &&
!rotateRequirement.forceUpOrientation;
case Rule::RotateSupport::MultipleOf90Flip:
return isRotationMultipleOf90;
default:
SPECTRUM_UNREACHABLE;
}
}