/**
  * Returns a new (partial) match. This can be used e.g. to call the matcher with a partial match.
  *
  * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match
  * object.
  *
  * @param pRoute the fixed value of pattern parameter route, or null if not bound.
  * @param pSensor the fixed value of pattern parameter sensor, or null if not bound.
  * @param pSwitchPosition the fixed value of pattern parameter switchPosition, or null if not
  *     bound.
  * @param pSw the fixed value of pattern parameter sw, or null if not bound.
  * @return the (partial) match object.
  */
 public RouteSensorMatch newMatch(
     final Route pRoute,
     final Sensor pSensor,
     final SwitchPosition pSwitchPosition,
     final Switch pSw) {
   return RouteSensorMatch.newMatch(pRoute, pSensor, pSwitchPosition, pSw);
 }
 @Override
 protected RouteSensorMatch arrayToMatch(final Object[] match) {
   try {
     return RouteSensorMatch.newMatch(
         (hu.bme.mit.trainbenchmark.ttc.railway.Route) match[POSITION_ROUTE],
         (hu.bme.mit.trainbenchmark.ttc.railway.Sensor) match[POSITION_SENSOR],
         (hu.bme.mit.trainbenchmark.ttc.railway.SwitchPosition) match[POSITION_SWITCHPOSITION],
         (hu.bme.mit.trainbenchmark.ttc.railway.Switch) match[POSITION_SW]);
   } catch (ClassCastException e) {
     LOGGER.error("Element(s) in array not properly typed!", e);
     return null;
   }
 }
 @Override
 protected RouteSensorMatch tupleToMatch(final Tuple t) {
   try {
     return RouteSensorMatch.newMatch(
         (hu.bme.mit.trainbenchmark.ttc.railway.Route) t.get(POSITION_ROUTE),
         (hu.bme.mit.trainbenchmark.ttc.railway.Sensor) t.get(POSITION_SENSOR),
         (hu.bme.mit.trainbenchmark.ttc.railway.SwitchPosition) t.get(POSITION_SWITCHPOSITION),
         (hu.bme.mit.trainbenchmark.ttc.railway.Switch) t.get(POSITION_SW));
   } catch (ClassCastException e) {
     LOGGER.error("Element(s) in tuple not properly typed!", e);
     return null;
   }
 }