C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
norm< T > Struct Template Reference
Inheritance diagram for norm< T >:
[legend]
Collaboration diagram for norm< T >:
[legend]

Public Types

typedef exprtk::igeneric_function< T > igfun_t
 
typedef igfun_t::parameter_list_t parameter_list_t
 
typedef igfun_t::generic_type generic_type
 
typedef generic_type::scalar_view scalar_t
 
typedef generic_type::vector_view vector_t
 
- Public Types inherited from exprtk::igeneric_function< T >
enum  return_type { e_rtrn_scalar = 0 , e_rtrn_string = 1 , e_rtrn_overload = 2 }
 
typedef T type
 
typedef type_store< T > generic_type
 
typedef generic_type::parameter_list parameter_list_t
 

Public Member Functions

 norm ()
 
operator() (const std::size_t &ps_index, parameter_list_t parameters)
 
template<unsigned int Pow>
norm_impl (const vector_t &vector, const std::size_t r0, const std::size_t r1)
 
norm_impl (const vector_t &vector, unsigned int pow, const std::size_t r0, const std::size_t r1)
 
- Public Member Functions inherited from exprtk::igeneric_function< T >
 igeneric_function (const std::string &param_seq="", const return_type rtr_type=e_rtrn_scalar)
 
virtual ~igeneric_function ()
 
virtual T operator() (parameter_list_t)
 
virtual T operator() (std::string &, parameter_list_t)
 
virtual T operator() (const std::size_t &, std::string &, parameter_list_t)
 
- Public Member Functions inherited from exprtk::function_traits
 function_traits ()
 
bool & allow_zero_parameters ()
 
bool & has_side_effects ()
 
std::size_t & min_num_args ()
 
std::size_t & max_num_args ()
 

Additional Inherited Members

- Public Attributes inherited from exprtk::igeneric_function< T >
std::string parameter_sequence
 
return_type rtrn_type
 

Detailed Description

template<typename T>
struct norm< T >

Definition at line 29 of file exprtk_vectornorm.cpp.

Member Typedef Documentation

◆ generic_type

template<typename T >
typedef igfun_t::generic_type norm< T >::generic_type

Definition at line 33 of file exprtk_vectornorm.cpp.

◆ igfun_t

template<typename T >
typedef exprtk::igeneric_function<T> norm< T >::igfun_t

Definition at line 31 of file exprtk_vectornorm.cpp.

◆ parameter_list_t

template<typename T >
typedef igfun_t::parameter_list_t norm< T >::parameter_list_t

Definition at line 32 of file exprtk_vectornorm.cpp.

◆ scalar_t

template<typename T >
typedef generic_type::scalar_view norm< T >::scalar_t

Definition at line 34 of file exprtk_vectornorm.cpp.

◆ vector_t

template<typename T >
typedef generic_type::vector_view norm< T >::vector_t

Definition at line 35 of file exprtk_vectornorm.cpp.

Constructor & Destructor Documentation

◆ norm()

template<typename T >
norm< T >::norm ( )
inline

Definition at line 39 of file exprtk_vectornorm.cpp.

40 : exprtk::igeneric_function<T>("V|VTT|VT|VTTT")
41 /*
42 Overloads:
43 0. V - vector
44 1. VTT - vector, r0, r1
45 2. VT - vector, l-power
46 3. VTTT - vector, l-power, r0, r1
47 */
48 {}

Member Function Documentation

◆ norm_impl() [1/2]

template<typename T >
template<unsigned int Pow>
T norm< T >::norm_impl ( const vector_t vector,
const std::size_t  r0,
const std::size_t  r1 
)
inline

Definition at line 98 of file exprtk_vectornorm.cpp.

99 {
100 T sum = T(0);
101
102 for (std::size_t i = r0; i <= r1; ++i)
103 {
104 sum += exprtk::details::numeric::fast_exp<T,Pow>::result(std::abs(vector[i]));
105 }
106
107 switch (Pow)
108 {
109 case 1 : return sum;
110 case 2 : return exprtk::details::numeric::sqrt(sum);
111 default : return exprtk::details::numeric::pow(sum, T(1) / Pow);
112 }
113 }
T pow(const T v0, const T v1)
Definition exprtk.hpp:1488

References exprtk::details::numeric::pow(), exprtk::details::numeric::fast_exp< T, N >::result(), and exprtk::details::numeric::sqrt().

Referenced by norm< T >::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ norm_impl() [2/2]

template<typename T >
T norm< T >::norm_impl ( const vector_t vector,
unsigned int  pow,
const std::size_t  r0,
const std::size_t  r1 
)
inline

Definition at line 115 of file exprtk_vectornorm.cpp.

116 {
117 T sum = T(0);
118
119 for (std::size_t i = r0; i <= r1; ++i)
120 {
121 sum += exprtk::details::numeric::pow(std::abs(vector[i]),T(pow));
122 }
123
124 return exprtk::details::numeric::pow(sum,T(1) / pow);
125 }

References exprtk::details::numeric::pow().

Here is the call graph for this function:

◆ operator()()

template<typename T >
T norm< T >::operator() ( const std::size_t &  ps_index,
parameter_list_t  parameters 
)
inlinevirtual

Reimplemented from exprtk::igeneric_function< T >.

Definition at line 50 of file exprtk_vectornorm.cpp.

51 {
52 unsigned int l = 2;
53
54 // Determine the l-power
55 if (
56 (2 == ps_index) ||
57 (3 == ps_index)
58 )
59 {
60 if (!scalar_t(parameters[1]).to_uint(l))
61 return std::numeric_limits<T>::quiet_NaN();
62 }
63
64 const vector_t vec(parameters[0]);
65
66 std::size_t r0 = 0;
67 std::size_t r1 = vec.size() - 1;
68
69 // Determine the range over the vector
70 if (
71 (1 == ps_index) ||
72 (3 == ps_index)
73 )
74 {
75 if (!scalar_t(parameters[(1 == ps_index) ? 1 : 2]).to_uint(r0))
76 return std::numeric_limits<T>::quiet_NaN();
77
78 if (!scalar_t(parameters[(1 == ps_index) ? 2 : 3]).to_uint(r1))
79 return std::numeric_limits<T>::quiet_NaN();
80 }
81
82 switch (l)
83 {
84 #define norm_def(N) case N : return norm_impl<N>(vec,r0,r1);
85 norm_def( 1) norm_def( 2) norm_def( 3) norm_def( 4)
86 norm_def( 5) norm_def( 6) norm_def( 7) norm_def( 8)
87 norm_def( 9) norm_def(10) norm_def(11) norm_def(12)
88 norm_def(13) norm_def(14) norm_def(15) norm_def(16)
89 norm_def(17) norm_def(18) norm_def(19) norm_def(20)
90 norm_def(21) norm_def(22) norm_def(23) norm_def(24)
91 norm_def(25) norm_def(26) norm_def(27) norm_def(28)
92 norm_def(29) norm_def(30) norm_def(31) norm_def(32)
93 default : return norm_impl(vec,l,r0,r1);
94 }
95 }
#define norm_def(N)
T norm_impl(const vector_t &vector, const std::size_t r0, const std::size_t r1)
generic_type::scalar_view scalar_t
generic_type::vector_view vector_t

References norm_def, norm< T >::norm_impl(), and exprtk::type_store< T >::type_view< ViewType >::size().

Here is the call graph for this function:

The documentation for this struct was generated from the following file: