16 #ifndef MATHTOOLS_MANHATTAN_NORM_H
17 #define MATHTOOLS_MANHATTAN_NORM_H
25 template<
typename COORD_ITERATOR>
26 auto ManhattanFunc_value(COORD_ITERATOR begin, COORD_ITERATOR end) -> decltype(typeHelper(*begin))
28 decltype(typeHelper(*begin)) result = 0;
29 while (begin != end) {
30 result += std::fabs(*begin);
36 template<std::
size_t N,
typename COORD_TYPE>
37 struct ManhattanFuncArity
39 static typename NumTraits<COORD_TYPE>::Real value(
const COORD_TYPE* coordPtr)
41 return ManhattanFuncArity<N - 1, COORD_TYPE>::value(coordPtr) + std::fabs(*(coordPtr + N - 1));
45 template<
typename COORD_TYPE>
46 struct ManhattanFuncArity<1, COORD_TYPE>
48 static typename NumTraits<COORD_TYPE>::Real value(
const COORD_TYPE* coordPtr)
49 {
return std::fabs(*coordPtr); }
54 template<
typename COORD_ITERATOR>
55 static auto fromRange(COORD_ITERATOR begin, COORD_ITERATOR end) -> decltype(typeHelper(*begin))
56 {
return ManhattanFunc_value(begin, end); }
58 template<std::
size_t N,
typename COORD_TYPE>
59 static typename NumTraits<COORD_TYPE>::Real fromPtr(
const COORD_TYPE* coordPtr)
60 {
return ManhattanFuncArity<N, COORD_TYPE>::value(coordPtr); }
63 template<>
struct NormTraits<internal::ManhattanFunc>
65 typedef ArityNormSpecializationTag NormCategory;
81 #endif // MATHTOOLS_NORMS_MANHATTAN_H
Computation of norms in K-vector space.
Definition: norm.h:60
Norm< internal::ManhattanFunc > ManhattanNorm
Provides computation of the manhattan(or taxicab) norm
Definition: manhattan_norm.h:77