#pragma once

#include <memory>

class DiscretePoint
{
public:
    DiscretePoint(unsigned x = 0, unsigned y = 0);

    ~DiscretePoint();

    std::shared_ptr<DiscretePoint> Create(unsigned x, unsigned y);

    unsigned getX() const;

    unsigned getY() const;

    bool operator==(const DiscretePoint& rhs) const
    {
       return (mX == rhs.mX)
       && (mY == rhs.mY);
    }
    bool operator!=(const DiscretePoint& rhs) const
    {
      return !operator==(rhs);
    }

private:
    unsigned mX{ 0 };
    unsigned mY{ 0 };
};

using Pixel = DiscretePoint;
using DiscretePointPtr = std::shared_ptr<DiscretePoint>;
using PixelPtr = DiscretePointPtr;
