#pragma once

#include "Bounds.h"

#include <vector>
#include <memory>

class AbstractGrid
{
public:
    AbstractGrid(const Bounds& bounds, std::size_t numPointsX, std::size_t numPointsY, std::size_t numPointsZ = 1);

    virtual ~AbstractGrid();

    const Bounds& getBounds() const;

    virtual std::size_t getDataSize() const = 0;

    double getXSpacing() const;

    double getYSpacing() const;

    void resetBounds(const Bounds& bounds);

protected:
    Bounds mBounds;
    std::size_t mNumX{ 0 };
    std::size_t mNumY{ 0 };
    std::size_t mNumZ{ 0 };
};
