8 #ifndef VISR_LIBEFL_LAGRANGE_COEFFICIENT_CALCULATOR_HPP_INCLUDED 9 #define VISR_LIBEFL_LAGRANGE_COEFFICIENT_CALCULATOR_HPP_INCLUDED 29 template<
typename DataType, std::
size_t N,
bool reverseCoeffs = false >
43 void calculateCoefficients( DataType mu, DataType * result )
const;
46 static constexpr std::size_t storageSize() {
return internalStorageSize( N + 1 ); }
48 static constexpr std::size_t internalStorageSize(
size_t length )
50 return length <= 2 ? length : length + internalStorageSize( length / 2 );
53 static constexpr std::size_t numberOfStages()
55 return numberOfStagesImpl( N+1 );
58 static constexpr std::size_t stageSize( std::size_t stage )
60 return stage == 0 ? N+1 : stageSize( stage - 1 ) / 2;
63 static constexpr std::size_t stageOffset( std::size_t stage )
65 return stage == 0 ? 0 : stageOffset( stage - 1 ) + stageSize( stage - 1 );
68 template<std::
size_t length>
69 void multiplyAndShuffle( DataType * coeffs )
const;
71 static DataType offset( std::size_t idx );
73 static DataType scaleFactor( std::size_t idx );
75 static constexpr std::size_t numberOfStagesImpl( std::size_t length )
77 return length <= 1 ? 1 : 1 + numberOfStagesImpl( length / 2 );
80 static std::array<DataType, N+1> generateOffsets();
82 static std::array<DataType, N+1> generateScaleFactors();
84 #if LAGRANGE_COEFFICIENT_CALCULATOR_GENERATE_STAGE_TABLES 85 static std::array<std::size_t, LagrangeCoefficientCalculator<DataType,N>::numberOfStages()> generateStageSizes();
87 static std::array<std::size_t, LagrangeCoefficientCalculator<DataType,N>::numberOfStages()> generateStageOffsets();
89 mutable std::array<DataType, internalStorageSize(N+1)> mInternalCoeffs;
91 const std::array<DataType, N+1> cOffsets;
93 const std::array<DataType, N+1> cScaleFactors;
95 #if LAGRANGE_COEFFICIENT_CALCULATOR_GENERATE_STAGE_TABLES 96 static const std::array<std::size_t, LagrangeCoefficientCalculator<DataType,N>::numberOfStages()> cStageSizes;
98 static const std::array<std::size_t, LagrangeCoefficientCalculator<DataType,N>::numberOfStages()> cStageOffsets;
105 #endif // #ifndef VISR_LIBEFL_LAGRANGE_COEFFICIENT_CALCULATOR_HPP_INCLUDED Definition: options.cpp:10
Definition: lagrange_coefficient_calculator.hpp:30