MQL5Book/Include/LibHoughTransform.mqh
super.admin 1c8e83ce31 convert
2025-05-30 16:09:41 +02:00

65 lines
2.8 KiB
MQL5

//+------------------------------------------------------------------+
//| LibHoughTransform.mqh |
//| Copyright (c) 2015-2022, Marketeer |
//| https://www.mql5.com/en/users/marketeer |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Source image for processing |
//+------------------------------------------------------------------+
template<typename T>
interface HoughImage
{
virtual int getWidth() const;
virtual int getHeight() const;
virtual T get(int x, int y) const;
};
//+------------------------------------------------------------------+
//| Meta-information about specific Hough algorithm (i.e. linear) |
//+------------------------------------------------------------------+
struct HoughInfo
{
const int dimension; // number of parameters in formula
const string about; // description
HoughInfo(const int n, const string s): dimension(n), about(s) { }
HoughInfo(const HoughInfo &other): dimension(other.dimension), about(other.about) { }
};
//+------------------------------------------------------------------+
//| Main service provider - class compatible with export by pointer |
//+------------------------------------------------------------------+
class HoughTransform
{
public:
template<typename T>
int transform(const HoughImage<T> &image, double &result[], const int elements = 8)
{
HoughTransformConcrete<T> *ptr = dynamic_cast<HoughTransformConcrete<T> *>(&this);
if(ptr) return ptr.extract(image, result, elements);
return 0;
}
};
//+------------------------------------------------------------------+
//| Main service worker - template class with actual implementation |
//+------------------------------------------------------------------+
template<typename T>
class HoughTransformConcrete: public HoughTransform
{
public:
virtual int extract(const HoughImage<T> &image, double &result[], const int elements = 8) = 0;
};
//+------------------------------------------------------------------+
//| Include (debug) vs import (production) |
//+------------------------------------------------------------------+
#ifdef LIB_HOUGH_IMPL_DEBUG // use this in the main program to embed library source inline
#include "../../Libraries/MQL5Book/LibHoughTransform.mq5"
#else
#import "MQL5Book/LibHoughTransform.ex5"
HoughTransform *createHoughTransform(const int quants, const ENUM_DATATYPE type = TYPE_INT);
HoughInfo getHoughInfo();
#import
#endif
//+------------------------------------------------------------------+