class Core::Portable::GraphicsAlgorithm

class GraphicsAlgorithm
{
public:
    // methods

    template <typename Target, typename ColorType>
    static void drawLine(
        Target& target,
        BitmapData& data,
        int x0,
        int y0,
        int x1,
        int y1,
        ColorType color
    );

    template <typename T>
    static void swap(T& a, T& b);

    static int round(double x);
    static int ipart(double x);
    static double fpart(double x);
    static double rfpart(double x);

    static void drawLineAntialias(
        ColorBitmapRenderer& target,
        BitmapData& data,
        int x0,
        int y0,
        int x1,
        int y1,
        Color color
    );

    template <typename Target, typename ColorType>
    static void drawLinearGradient(
        Target target,
        BitmapData& data,
        PointRef startPoint,
        PointRef endPoint,
        ColorType startColor,
        ColorType endColor,
        Graphics::Direction direction
    );
};