LinearInterpolationAlongPolyline::LinearInterpolationAlongPolyline(
		const GeoLib::Polyline& ply,
		const std::vector<std::size_t>& vec_interpolate_point_ids,
		const std::vector<double>& vec_interpolate_point_values,
		const double search_length, const double default_value)
: _ply(ply),
  _interpolation(createInterpolation(ply, vec_interpolate_point_ids, vec_interpolate_point_values)),
 _search_length(search_length), _default_value(default_value)
{}
 void SabrInterpolatedSmileSection::performCalculations() const {
     forwardValue_ = forward_->value();
     vols_.clear();
     actualStrikes_.clear();
     // we populate the volatilities, skipping the invalid ones
     for (Size i=0; i<volHandles_.size(); ++i) {
         if (volHandles_[i]->isValid()) {
             if (hasFloatingStrikes_) {
                 actualStrikes_.push_back(forwardValue_ + strikes_[i]);
                 vols_.push_back(atmVolatility_->value() + volHandles_[i]->value());
             } else {
                 actualStrikes_.push_back(strikes_[i]);
                 vols_.push_back(volHandles_[i]->value());
             }
         }
     }
     // we are recreating the sabrinterpolation object unconditionnaly to
     // avoid iterator invalidation
     createInterpolation();
     sabrInterpolation_->update();
 }