Program Listing for File Distance.h

Return to documentation for file (include/gwmodelpp/spatialweight/Distance.h)

#ifndef DISTANCE_H
#define DISTANCE_H

#include <memory>
#include <string>
#include <unordered_map>
#include <armadillo>
#include <variant>


namespace gwm
{

typedef std::variant<arma::mat, arma::vec, arma::uword> DistParamVariant;

class Distance
{
public:

    struct Parameter
    {
        arma::uword total;

        Parameter(): total(0) {}
    };

    enum DistanceType
    {
        CRSDistance,
        MinkwoskiDistance,
        DMatDistance,
        OneDimDistance,
    };

    static std::unordered_map<DistanceType, std::string> TypeNameMapper;

public:

    virtual ~Distance() {};

    virtual Distance* clone() = 0;

    virtual DistanceType type() = 0;

    virtual Parameter* parameter() const = delete;


public:

    virtual void makeParameter(std::initializer_list<DistParamVariant> plist) = 0;

    virtual arma::vec distance(arma::uword focus) = 0;

    virtual double maxDistance() = 0;

    virtual double minDistance() = 0;

};

}


#endif // DISTANCE_H