.. _program_listing_file_include_gwmodelpp_spatialweight_Distance.h: Program Listing for File Distance.h =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/gwmodelpp/spatialweight/Distance.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef DISTANCE_H #define DISTANCE_H #ifdef ENABLE_CUDA #include #include "gwmodelpp/spatialweight/cuda/ISpatialCudaEnabled.h" #endif // ENABLE_CUDA #include #include #include #include "armadillo_config.h" #include namespace gwm { typedef std::variant DistParamVariant; class Distance #ifdef ENABLE_CUDA : public ISpatialCudaEnabled #endif { public: struct Parameter { arma::uword total; Parameter(): total(0) {} }; enum DistanceType { CRSDistance, MinkwoskiDistance, DMatDistance, OneDimDistance, CRSSTDistance, }; static std::unordered_map TypeNameMapper; public: virtual ~Distance() {}; virtual Distance* clone() const = 0; virtual DistanceType type() = 0; virtual Parameter* parameter() const = delete; public: virtual void makeParameter(std::initializer_list plist) = 0; virtual arma::vec distance(arma::uword focus) = 0; #ifdef ENABLE_CUDA virtual bool useCuda() override { return mUseCuda; } virtual void setUseCuda(bool isUseCuda) override { mUseCuda = isUseCuda; } virtual cudaError_t prepareCuda(size_t gpuId) override; virtual cudaError_t distance(arma::uword focus, double* d_dists, size_t* elems) { throw std::logic_error("Function not yet implemented"); } #endif // ENABLE_CUDA virtual double maxDistance() = 0; virtual double minDistance() = 0; #ifdef ENABLE_CUDA protected: bool mUseCuda = false; //