16 #ifndef MATHTOOLS_NORM_H
17 #define MATHTOOLS_NORM_H
26 template<
typename VEC>
struct VecTraitsHelper
28 typedef typename NumTraits< typename VecTraits<VEC>::CoordType >::Real Real;
59 template<
typename FUNC>
65 template<
typename COORD_ITERATOR>
67 static auto fromRange(COORD_ITERATOR begin, COORD_ITERATOR end) -> decltype(internal::typeHelper(*begin))
68 {
return FUNC::fromRange(begin, end); }
70 static CompatibleRealType
fromRange(COORD_ITERATOR begin, COORD_ITERATOR end);
73 template<
typename COORD_ITERATOR>
74 static bool isNullRange(COORD_ITERATOR begin, COORD_ITERATOR end)
76 typedef decltype(*begin) CoordType;
85 template<std::
size_t N,
typename COORD_TYPE>
89 typename internal::NormTraits<FUNC>::NormCategory normCategory;
90 return Norm::fromPtrDispatch<N, COORD_TYPE>(coordPtr, normCategory);
93 static CompatibleRealType
fromPtr(
const COORD_TYPE* coordPtr);
96 template<std::
size_t N,
typename COORD_TYPE>
103 template<std::
size_t N,
typename COORD_TYPE>
106 {
return Norm::fromPtr<N, COORD_TYPE>(&coordArray[0]); }
108 static CompatibleRealType
fromArray(
const COORD_TYPE (&coordArray)[N]);
111 template<std::
size_t N,
typename COORD_TYPE>
118 template<
typename VEC>
120 static typename internal::VecTraitsHelper<VEC>::Real
fromObject(
const VEC& vec)
123 return Norm::fromObjectDispatch(vec, accessCategory);
126 static CompatibleRealType
fromObject(
const VEC& vec);
129 template<
typename VEC>
140 template<std::
size_t N,
typename COORD_TYPE>
142 internal::DefaultNormSpecializationTag)
146 template<std::
size_t N,
typename COORD_TYPE>
147 static typename NumTraits<COORD_TYPE>::Real fromPtrDispatch(
const COORD_TYPE* coordPtr,
148 internal::ArityNormSpecializationTag)
149 {
return FUNC::template fromPtr<N, COORD_TYPE>(coordPtr); }
152 template<
typename VEC>
153 static typename internal::VecTraitsHelper<VEC>::Real fromObjectDispatch(
const VEC& vec,
154 StlIteratorVecAccessTag)
158 template<
typename VEC>
159 static typename internal::VecTraitsHelper<VEC>::Real fromObjectDispatch(
const VEC& vec,
160 FuncIteratorVecAccessTag)
161 {
return Norm::fromRange(VecAccess<VEC>::begin(vec), VecAccess<VEC>::end(vec)); }
164 template<
typename VEC>
165 static typename internal::VecTraitsHelper<VEC>::Real fromObjectDispatch(
const VEC& vec,
168 typedef typename VecTraits<VEC>::CoordType CoordType;
169 return Norm::fromPtr<VecTraits<VEC>::Arity, CoordType>(VecAccess<VEC>::pointer(vec));
173 template<
typename VEC>
174 static typename internal::VecTraitsHelper<VEC>::Real fromObjectDispatch(
const VEC& vec,
175 StdArrayVecAccessTag)
177 const auto&& array = VecAccess<VEC>::stdarray(vec);
186 #endif // MATHTOOLS_NORM_H
Computation of norms in K-vector space.
Definition: norm.h:60
static CompatibleRealType fromPtr(const COORD_TYPE *coordPtr)
Returns the norm of the vector with its N coordinates stored in memory at coordPtr.
static bool isNullArray(const COORD_TYPE(&coordArray)[N])
Definition: norm.h:112
static CompatibleRealType fromArray(const COORD_TYPE(&coordArray)[N])
Returns the norm of the vector with its N coordinates stored in array coordArray. ...
static bool isNullObject(const VEC &vec)
Definition: norm.h:130
static Real precision()
Definition: num_traits.h:30
static bool isNullRange(COORD_ITERATOR begin, COORD_ITERATOR end)
Definition: norm.h:74
static CompatibleRealType fromObject(const VEC &vec)
Returns the norm of the vector object vec.
static CompatibleRealType fromRange(COORD_ITERATOR begin, COORD_ITERATOR end)
Returns the norm of the vector with coordinates in iterator range [ begin , end ].
T Real
Definition: num_traits.h:28
static bool isNullPtr(const COORD_TYPE *coordPtr)
Definition: norm.h:97
Type traits on vector types.
Definition: vec_traits.h:167