package gw.reinsurance uses gw.pl.currency.MonetaryAmount uses java.math.BigDecimal class NullSafeMath { static function nsAdd(arg1 : MonetaryAmount, arg2 : MonetaryAmount) : MonetaryAmount { return (arg1 == null || arg2 == null ? null : arg1 + arg2) } static function nsSub(arg1 : MonetaryAmount, arg2 : MonetaryAmount) : MonetaryAmount { return (arg1 == null || arg2 == null ? null : arg1 - arg2) } static function nsMult(arg1 : BigDecimal, arg2 : BigDecimal) : BigDecimal { return (arg1 == null || arg2 == null ? null : arg1 * arg2) } static function nsDiv(arg1 : BigDecimal, arg2 : BigDecimal) : BigDecimal { return (arg1 == null || arg2 == null ? null : arg1 / arg2) } static function nsSum(arr : T[], mapper : block(obj : T) : BigDecimal) : BigDecimal { var sum = BigDecimal.ZERO for (elt in arr) { var arg = mapper(elt) if (arg == null) { return null } sum = sum + arg } return sum } }