class MulticurveProviderDiscount implements MulticurveProviderInterface, Serializable {

  public void setCurve(final Currency ccy, final YieldAndDiscountCurve curve) {
    ArgumentChecker.notNull(ccy, "currency");
    ArgumentChecker.notNull(curve, "curve");
    if (!_discountingCurves.containsKey(ccy)) {
      _discountingCurves.put(ccy, curve);
      setAllCurves();
    } else {
      boolean curvesEqual = _discountingCurves.get(ccy).equals(curve);
      s_logger.debug("Two {} discounting curves for {}: {} {}",
                     curvesEqual ? "equal" : "unequal", ccy.getCode(), curve, _discountingCurves.get(ccy));

      if (!curvesEqual) {
        throw new IllegalArgumentException("Attempting to replace " + ccy.getCode() + " discounting curve with " +
                                               "different curve. existing: " + _discountingCurves.get(ccy) + ", new: " +
                                               curve);
      }
    }
  }

  public  MulticurveProviderDiscount();
  public  MulticurveProviderDiscount(final FXMatrix fxMatrix);
  public  MulticurveProviderDiscount(final Map<Currency, YieldAndDiscountCurve> discountingCurves, final Map<IborIndex, YieldAndDiscountCurve> forwardIborCurves,
      final Map<IndexON, YieldAndDiscountCurve> forwardONCurves, final FXMatrix fxMatrix);
  public  MulticurveProviderDiscount(final MulticurveProviderDiscount market);

}