public override List<CashFlow> value()
{
List<CashFlow> leg = new List<CashFlow>();
// the following is not always correct
Calendar calendar = schedule_.calendar();
// first period
Date start = schedule_[0], end = schedule_[schedule_.Count - 1];
Date paymentDate = calendar.adjust(start, paymentAdjustment_);
double nominal = notionals_[0];
double quota = nominal / (schedule_.Count - 1);
leg.Add(new Principal(nominal * sign_, nominal, paymentDate, start, end, dayCounter_, start, end));
if (schedule_.Count == 2)
{
paymentDate = calendar.adjust(end, paymentAdjustment_);
leg.Add(new Principal(nominal * sign_ * -1, 0, paymentDate, start, end, dayCounter_, start, end));
}
else
{
end = schedule_[0];
// regular periods
for (int i = 1; i <= schedule_.Count - 1; ++i)
{
start = end; end = schedule_[i];
paymentDate = calendar.adjust(start, paymentAdjustment_);
nominal -= quota;
leg.Add(new Principal(quota * sign_ * -1, nominal, paymentDate, start, end, dayCounter_, start, end));
}
}
return leg;
}