package gw.rating.rtm.matchop uses gw.rating.rtm.domain.OrderedPersistenceAdapter uses gw.rating.rtm.matchop.ParamConverter.DecimalConverter uses java.lang.Integer uses java.util.Map uses java.util.List uses gw.rating.rtm.query.IInterpolationState @ReadOnly class StatelessRelaxingInterpolatedMatch extends StatelessInterpolatedMatch { construct(matchOp : RateTableMatchOp) { super(matchOp) // Always convert the parameter to Decimal. // Because we never compare against it except at interpolation time, this is correct. converter = new DecimalConverter(this) } override property get NumInterpolationPointsNeeded(): int { return 1 // linear interpolation, one point at each side } override function setUpInterpolationState(interpState: IInterpolationState, matchOps: List, numActiveOps: int, partitionedRows: Map>): IInterpolationState { final var rowSorter = getRowSorter(matchOps, numActiveOps, interpState) if (partitionedRows.get(0) != null) { return interpState.addRowsEqual(rowSorter(partitionedRows.get(0))) } else if (interpState.HasRowsAbove) { return interpState.addRowsBelow(rowSorter(partitionedRows.get(-1))) } else if (interpState.HasRowsBelow) { return interpState.addRowsAbove(rowSorter(partitionedRows.get(1))) } var sortedRows = partitionedRows.mapValues(rowSorter) return interpState.withRows(sortedRows.get(- 1), sortedRows.get(0), sortedRows.get(1)) } }