/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.ircurve.strips;
import com.opengamma.id.ExternalId;
/**
* Visitor interface for curve nodes.
* @param <T> The return type for the visitor
*/
public interface CurveNodeWithExternalIdVisitor<T> {
/**
* Visits a {@link CashNode}
* @param node A cash node
* @param externalId External ID
* @return The return value
*/
T visitCashNode(CashNode node, ExternalId externalId);
/**
* Visits a {@link ContinuouslyCompoundedRateNode}
* @param node A continuously compounded rate node
* @param externalId External ID
* @return The return value
*/
T visitContinuouslyCompoundedRateNode(ContinuouslyCompoundedRateNode node, ExternalId externalId);
/**
* Visits a {@link CreditSpreadNode}
* @param node A credit spread node
* @param externalId External ID
* @return The return value
*/
T visitCreditSpreadNode(CreditSpreadNode node, ExternalId externalId);
/**
* Visits a {@link DeliverableSwapFutureNode}
* @param node A deliverable swap future node
* @param externalId External ID
* @return The return value
*/
T visitDeliverableSwapFutureNode(DeliverableSwapFutureNode node, ExternalId externalId);
/**
* Visits a {@link DiscountFactorNode}
* @param node A discount factor node
* @param externalId External ID
* @return The return value
*/
T visitDiscountFactorNode(DiscountFactorNode node, ExternalId externalId);
/**
* Visits a {@link FRANode}
* @param node A FRA node
* @param externalId External ID
* @return The return value
*/
T visitFRANode(FRANode node, ExternalId externalId);
/**
* Visits a {@link FXForwardNode}
* @param node A FX forward node
* @param externalId External ID
* @return The return value
*/
T visitFXForwardNode(FXForwardNode node, ExternalId externalId);
/**
* Visits a {@link RateFutureNode}
* @param node A rate future node
* @param externalId External ID
* @return The return value
*/
T visitRateFutureNode(RateFutureNode node, ExternalId externalId);
/**
* Visits a {@link SwapNode}
* @param node A swap node
* @param externalId External ID
* @return The return value
*/
T visitSwapNode(SwapNode node, ExternalId externalId);
/**
* Visits a {@link ZeroCouponInflationNode}
* @param node A zero-coupon inflation node
* @param externalId External ID
* @return The return value
*/
T visitZeroCouponInflationNode(ZeroCouponInflationNode node, ExternalId externalId);
}