minkowski_norm.h

Back to Norms

pastel/math/norm/

// Description: Minkowski norm
// Documentation: norms.txt

#ifndef PASTELMATH_MINKOWSKI_NORM_H
#define PASTELMATH_MINKOWSKI_NORM_H

#include "pastel/math/norm/norm_concept.h"
#include "pastel/math/distance/minkowski_distance.h"

namespace Pastel
{

    template <typename Real>
    struct Minkowski_Norm
    {
        explicit Minkowski_Norm(const Real& p = 2)
        : p_(p)
        {
        }

        Real power() const {
            return p_;
        }

        auto operator()(const Real& distance = 0) const
        {
            return Minkowski_Distance<Real>(distance, p_);
        }

        auto operator[](const Real& distance) const
        {
            return Minkowski_Distance<Real>(Distance_Native(), distance, p_);
        }

        Real p_;
    };

}

#endif