public CubicSplineInterpolationImpl(List<double> xBegin, int size, List<double> yBegin,
                                      CubicSplineInterpolation.BoundaryCondition leftCondition,
                                      double leftConditionValue,
                                      CubicSplineInterpolation.BoundaryCondition rightCondition,
                                      double rightConditionValue,
                                      bool monotonicityConstraint)
    : base(xBegin, size, yBegin) 
 {
    cH_ = new CoefficientHolder(size - xBegin.Count);
    constrained_ = monotonicityConstraint;
    leftType_ = leftCondition;
    rightType_ = rightCondition;
    leftValue_ =  leftConditionValue;
    rightValue_ = rightConditionValue;
 }
 public CubicSplineInterpolation(List<double> xBegin, int size, List<double> yBegin,
                                 CubicSplineInterpolation.BoundaryCondition leftCondition,
                                 double leftConditionValue,
                                 CubicSplineInterpolation.BoundaryCondition rightCondition,
                                 double rightConditionValue,
                                 bool monotonicityConstraint) 
 {
      impl_ = (Interpolation.Impl) new CubicSplineInterpolationImpl(xBegin, size, yBegin,
                                         leftCondition,
                                         leftConditionValue,
                                         rightCondition,
                                         rightConditionValue,
                                         monotonicityConstraint);
      impl_.update();
      //coeffs_ = boost::dynamic_pointer_cast<detail::CoefficientHolder>(impl_);
  }