12 #ifndef ECL_GEOMETRY_TENSION_SPLINE_HPP_ 
   13 #define ECL_GEOMETRY_TENSION_SPLINE_HPP_ 
   41 namespace blueprints {
 
   43 class C2TensionSpline;
 
   59 class ECL_PUBLIC BluePrintFactory< TensionSpline > {
 
   74         static blueprints::C2TensionSpline Natural(
const Array<double>& x_set, 
const Array<double>& y_set,
 
   77         virtual ~BluePrintFactory() {};
 
  100         typedef BluePrintFactory< TensionSpline > Factory; 
 
  112         virtual ~TensionSpline() {};
 
  139         template<
typename Derived>
 
  140         TensionSpline(
const BluePrint< Derived > &blueprint) {
 
  141             blueprint.implementApply(*
this);
 
  147         friend class blueprints::C2TensionSpline;
 
  158         double operator()(
const double &x) 
const;
 
  169         double derivative(
const double &x) 
const;
 
  178         double dderivative(
const double &x) 
const;
 
  187         const Array<double>& domain()
 const { 
return discretised_domain; }
 
  204         template <
typename OutputStream>
 
  221 template <
typename OutputStream>
 
  226     for ( 
unsigned int i = 0; i < tension_spline.
functions.size(); ++i ) {
 
  227         ostream << tension_spline.
functions[i] << 
"\n";
 
  237 namespace blueprints {
 
  263         C2TensionSpline() {};
 
  264         ~C2TensionSpline() {};
 
  288         base_type instantiate();
 
  297         void apply(base_type& spline) 
const;