24#ifndef FPFITTER_HPP_INCLUDED
25#define FPFITTER_HPP_INCLUDED
27#include "fitpack_config.h"
30#include "fxArrays.hpp"
33#include "fitpack_fitter_c.h"
80 return tag ? tag : fitpack_fitter_c_typename;
123 virtual double mse()
const {
135 int32_t n =
static_cast<int32_t
>(buffer.size());
144 int32_t n =
static_cast<int32_t
>(buffer.size());
158 virtual void comm_pack(std::vector<double>& buffer)
const = 0;
176 double* raw =
nullptr;
177 int64_t extents[1] = {0};
179 const int64_t total = extents[0];
180 if (raw ==
nullptr || total <= 0)
return {};
181 const double* first =
reinterpret_cast<const double*
>(raw);
182 return std::vector<double>(first, first + total);
198 fxArray<double>
c()
const {
199 double* raw =
nullptr;
200 int64_t extents[1] = {0};
203 for (
int k = 0; k < 1; ++k) {
205 bounds[2 * k + 1] =
static_cast<FX_SIZE
>(extents[k]);
207 array_c descr = array_c_null;
208 array_c_from_ptr(&descr,
"c",
static_cast<void*
>(raw),
209 getCFITypeFlag<double>(),
210 static_cast<FX_SIZE
>(
sizeof(
double)),
211 static_cast<FX_RANK
>(1), bounds);
212 return fxArray<double>(descr);
221 double* raw =
nullptr;
222 int64_t extents[1] = {0};
224 const int64_t total = extents[0];
225 if (raw ==
nullptr || total <= 0)
return {};
226 const double* first =
reinterpret_cast<const double*
>(raw);
227 return std::vector<double>(first, first + total);
243 fxArray<double>
wrk()
const {
244 double* raw =
nullptr;
245 int64_t extents[1] = {0};
248 for (
int k = 0; k < 1; ++k) {
250 bounds[2 * k + 1] =
static_cast<FX_SIZE
>(extents[k]);
252 array_c descr = array_c_null;
253 array_c_from_ptr(&descr,
"wrk",
static_cast<void*
>(raw),
254 getCFITypeFlag<double>(),
255 static_cast<FX_SIZE
>(
sizeof(
double)),
256 static_cast<FX_RANK
>(1), bounds);
257 return fxArray<double>(descr);
266 int32_t* raw =
nullptr;
267 int64_t extents[1] = {0};
269 const int64_t total = extents[0];
270 if (raw ==
nullptr || total <= 0)
return {};
271 const int32_t* first =
reinterpret_cast<const int32_t*
>(raw);
272 return std::vector<int32_t>(first, first + total);
288 fxArray<int32_t>
iwrk()
const {
289 int32_t* raw =
nullptr;
290 int64_t extents[1] = {0};
293 for (
int k = 0; k < 1; ++k) {
295 bounds[2 * k + 1] =
static_cast<FX_SIZE
>(extents[k]);
297 array_c descr = array_c_null;
298 array_c_from_ptr(&descr,
"iwrk",
static_cast<void*
>(raw),
299 getCFITypeFlag<int32_t>(),
300 static_cast<FX_SIZE
>(
sizeof(int32_t)),
301 static_cast<FX_RANK
>(1), bounds);
302 return fxArray<int32_t>(descr);
327 const double&
fp()
const {
358 fitpack_fitter_c
cobj = fitpack_fitter_c_null;
360 template<
typename T> T*
as() {
return static_cast<T*
>(
static_cast<void*
>(&
cobj)); }
361 template<
typename T>
const T*
as()
const {
return static_cast<const T*
>(
static_cast<const void*
>(&
cobj)); }
const double & fp() const
Definition fpFitter.hpp:327
fxArray< int32_t > iwrk() const
Zero-copy fxArray view of component 'iwrk'.
Definition fpFitter.hpp:288
const char * fortran_type_name() const
Return the dynamic Fortran type name of the underlying object.
Definition fpFitter.hpp:78
virtual const char * c_type_name() const
Return the C wrapper struct name for this class (e.g. "fitpack_fitter_c").
Definition fpFitter.hpp:86
virtual int32_t comm_size() const =0
double & fp()
Definition fpFitter.hpp:324
virtual void comm_expand(std::vector< double > &buffer)=0
comm_expand (deferred)
double & smoothing()
Definition fpFitter.hpp:317
virtual void core_comm_pack(std::vector< double > &buffer) const
core_comm_pack
Definition fpFitter.hpp:134
virtual double mse() const
Definition fpFitter.hpp:123
int32_t & liwrk()
Definition fpFitter.hpp:338
const T * as() const
Definition fpFitter.hpp:361
fxArray< double > c() const
Zero-copy fxArray view of component 'c'.
Definition fpFitter.hpp:198
fpFitter(NoAlloc)
Protected constructor for derived classes (does not allocate)
Definition fpFitter.hpp:354
virtual ~fpFitter()=default
fitpack_fitter_c cobj
Definition fpFitter.hpp:358
int32_t & iopt()
Definition fpFitter.hpp:310
const int32_t & liwrk() const
Definition fpFitter.hpp:341
virtual bool is_allocated() const
Check if object is allocated.
Definition fpFitter.hpp:64
T * as()
Definition fpFitter.hpp:360
std::vector< int32_t > iwrk_vector() const
Deep copy of component 'iwrk' as a std::vector.
Definition fpFitter.hpp:265
fitpack_fitter_c & c_handle()
Get underlying C wrapper (for interop)
Definition fpFitter.hpp:108
const int32_t & lwrk() const
Definition fpFitter.hpp:334
virtual void comm_pack(std::vector< double > &buffer) const =0
comm_pack (deferred)
const int32_t & iopt() const
Definition fpFitter.hpp:313
virtual void destroy_base()
Definition fpFitter.hpp:149
std::vector< double > wrk_vector() const
Deep copy of component 'wrk' as a std::vector.
Definition fpFitter.hpp:220
int32_t & lwrk()
Definition fpFitter.hpp:331
const fitpack_fitter_c & c_handle() const
Get underlying C wrapper (const, for interop)
Definition fpFitter.hpp:115
virtual void core_comm_expand(std::vector< double > &buffer)
core_comm_expand
Definition fpFitter.hpp:143
virtual const char * cpp_type_name() const
Return the fully-qualified C++ class name for this class. Owned by the C++ layer — does not round-tri...
Definition fpFitter.hpp:94
fxArray< double > wrk() const
Zero-copy fxArray view of component 'wrk'.
Definition fpFitter.hpp:243
const double & smoothing() const
Definition fpFitter.hpp:320
virtual bool is_pointer() const
Check if this is a non-owning pointer.
Definition fpFitter.hpp:71
virtual int32_t core_comm_size() const
Definition fpFitter.hpp:127
std::vector< double > c_vector() const
Deep copy of component 'c' as a std::vector.
Definition fpFitter.hpp:175
Tag type for derived class constructors (no allocation)
Definition fpFitter.hpp:349
Tag type for non-owning view constructors of polymorphic concrete subtypes. Declared on roots and abs...
Definition fpFitter.hpp:103