//
// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) Contributors to the OpenEXR Project.
//

#ifndef INCLUDED_IMF_DEEP_IMAGE_H
#define INCLUDED_IMF_DEEP_IMAGE_H

//----------------------------------------------------------------------------
//
//      class DeepImage
//
//      For an explanation of images, levels and channels,
//      see the comments in header file Image.h.
//
//----------------------------------------------------------------------------

#include "ImfDeepImageLevel.h"
#include "ImfImage.h"
#include "ImfUtilExport.h"

#include "ImfTileDescription.h"

OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER


class IMFUTIL_EXPORT_TYPE DeepImage : public Image
{
  public:

    //
    // Constructors and destructor.
    // The default constructor constructs an image with an empty data
    // window level mode ONE_LEVEL and level rounding mode ROUND_DOWN.
    //

    IMFUTIL_EXPORT DeepImage();

    IMFUTIL_EXPORT
  	DeepImage(const IMATH_NAMESPACE::Box2i &dataWindow,
               LevelMode levelMode = ONE_LEVEL,
               LevelRoundingMode levelRoundingMode = ROUND_DOWN);

  	IMFUTIL_EXPORT virtual ~DeepImage();


    //
    // Accessing image levels by level number
    //

    IMFUTIL_EXPORT virtual DeepImageLevel &        level(int l = 0);
    IMFUTIL_EXPORT virtual const DeepImageLevel &  level(int l = 0) const;

    IMFUTIL_EXPORT virtual DeepImageLevel &        level(int lx, int ly);
    IMFUTIL_EXPORT virtual const DeepImageLevel &  level(int lx, int ly) const;

  protected:

    IMFUTIL_EXPORT
  	virtual DeepImageLevel *
        newLevel (int lx, int ly, const IMATH_NAMESPACE::Box2i &dataWindow);
};


OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT

#endif
