Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions include/fitpack_parametric_curves_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,10 @@ FP_REAL fitpack_parametric_curve_c_smoothing (fitpack_parametric_curve_c *
FP_REAL fitpack_parametric_curve_c_mse (fitpack_parametric_curve_c *self);
FP_SIZE fitpack_parametric_curve_c_degree (fitpack_parametric_curve_c *self);
FP_SIZE fitpack_parametric_curve_c_idim (fitpack_parametric_curve_c *self);
FP_REAL fitpack_parametric_curve_c_ubegin (fitpack_parametric_curve_c *self);
FP_REAL fitpack_parametric_curve_c_uend (fitpack_parametric_curve_c *self);
FP_REAL fitpack_parametric_curve_c_ubegin (const fitpack_parametric_curve_c *self);
FP_REAL fitpack_parametric_curve_c_uend (const fitpack_parametric_curve_c *self);
FP_REAL* fitpack_parametric_curve_c_ubegin_ref (fitpack_parametric_curve_c *self);
FP_REAL* fitpack_parametric_curve_c_uend_ref (fitpack_parametric_curve_c *self);

#ifdef __cplusplus
}
Expand Down
9 changes: 7 additions & 2 deletions include/fpParametricCurve.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,13 @@ class fpParametricCurve
const FP_REAL smoothing() { return fitpack_parametric_curve_c_smoothing(&cptr); };
const FP_REAL mse () { return fitpack_parametric_curve_c_mse(&cptr); };
const FP_SIZE ndim () { return fitpack_parametric_curve_c_idim(&cptr); };
const FP_REAL ubegin () { return fitpack_parametric_curve_c_ubegin(&cptr); };
const FP_REAL uend () { return fitpack_parametric_curve_c_uend(&cptr); };
const FP_REAL ubegin () const { return fitpack_parametric_curve_c_ubegin(&cptr);} ;
const FP_REAL uend () const { return fitpack_parametric_curve_c_uend(&cptr); };

FP_REAL& ubegin() { return *fitpack_parametric_curve_c_ubegin_ref(&cptr); };
FP_REAL& uend() { return *fitpack_parametric_curve_c_uend_ref(&cptr); };



// Get value at u
fpPoint eval(FP_REAL u, FP_FLAG* ierr=nullptr)
Expand Down
3 changes: 2 additions & 1 deletion src/fitpack_parametric.f90
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ module fitpack_parametric_curves

!> Interval boundaries
real(FP_REAL) :: ubegin = zero
real(FP_REAL) :: uend = zero
real(FP_REAL) :: uend = zero

! Node weights
real(FP_REAL), allocatable :: sp(:),w(:)
Expand Down Expand Up @@ -270,6 +270,7 @@ subroutine new_points(this,x,u,w)
this%uend = maxval(u)

else

allocate(this%u(m),source=zero)
this%x = x

Expand Down
41 changes: 39 additions & 2 deletions src/fitpack_parametric_c.f90
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ end function fitpack_parametric_curve_c_mse
!> Get begin endpoint
real(FP_REAL) function fitpack_parametric_curve_c_ubegin(this) &
bind(c,name='fitpack_parametric_curve_c_ubegin')
type(fitpack_parametric_curve_c), intent(inout) :: this
type(fitpack_parametric_curve_c), intent(in) :: this

type(fitpack_parametric_curve), pointer :: fcurve

Expand All @@ -345,7 +345,7 @@ end function fitpack_parametric_curve_c_ubegin
!> Get end endpoint
real(FP_REAL) function fitpack_parametric_curve_c_uend(this) &
bind(c,name='fitpack_parametric_curve_c_uend')
type(fitpack_parametric_curve_c), intent(inout) :: this
type(fitpack_parametric_curve_c), intent(in) :: this

type(fitpack_parametric_curve), pointer :: fcurve

Expand All @@ -360,6 +360,43 @@ real(FP_REAL) function fitpack_parametric_curve_c_uend(this) &

end function fitpack_parametric_curve_c_uend

!> Get a reference to begin endpoint
type(c_ptr) function fitpack_parametric_curve_c_ubegin_ref(this,ubegin) &
bind(c,name='fitpack_parametric_curve_c_ubegin_ref') result(ptr)
type(fitpack_parametric_curve_c), intent(inout) :: this
type(c_ptr), intent(out) :: ubegin

type(fitpack_parametric_curve), pointer :: fcurve

!> Get object; allocate it in case
call fitpack_parametric_curve_c_get_pointer(this,fcurve)

if (associated(fcurve)) then
ptr = c_loc(fcurve%ubegin)
else
ptr = c_null_ptr
end if

end function fitpack_parametric_curve_c_ubegin_ref

!> Get end endpoint
type(c_ptr) function fitpack_parametric_curve_c_uend_ref(this) &
bind(c,name='fitpack_parametric_curve_c_uend_ref') result(ptr)
type(fitpack_parametric_curve_c), intent(inout) :: this

type(fitpack_parametric_curve), pointer :: fcurve

!> Get object; allocate it in case
call fitpack_parametric_curve_c_get_pointer(this,fcurve)

if (associated(fcurve)) then
ptr = c_loc(fcurve%uend)
else
ptr = c_null_ptr
end if

end function fitpack_parametric_curve_c_uend_ref

!> Get spline degree
integer(FP_SIZE) function fitpack_parametric_curve_c_degree(this) &
bind(c,name='fitpack_parametric_curve_c_degree')
Expand Down