#ifndef GFX_IMAGE_PIXELFORMAT_GROUP_H__
#define GFX_IMAGE_PIXELFORMAT_GROUP_H__

#include "maxon/gfx_image_pixelformat.h"

namespace maxon
{

/// @addtogroup Graphics
/// @{

class PixelFormatGroup;
class PixelFormatIterator;

//----------------------------------------------------------------------------------------
/// Every pixel format belongs to a specific group. This interface define this group.
/// The group should define a general pixel format, e.g. RGB or BGRA etc. All the different implementations for different bit depths should
/// be grouped under that group.
//----------------------------------------------------------------------------------------
class PixelFormatGroupInterface : MAXON_INTERFACE_BASES(ObjectInterface)
{
	MAXON_INTERFACE(PixelFormatGroupInterface, MAXON_REFERENCE_CONST, "net.maxon.image.interface.pixelformatgroup");

public:
	MAXON_METHOD PixelFormatIterator GetEntries() const;
};

// include autogenerated headerfile here
#include "gfx_image_pixelformat_group1.hxx"

MAXON_REGISTRY(PixelFormatGroup, PixelFormats, "net.maxon.image.registry.pixelformats");

//----------------------------------------------------------------------------------------
/// Registry to register PixelFormats.
//----------------------------------------------------------------------------------------
namespace PixelFormats
{
	MAXON_DECLARATION(PixelFormatGroup, RGBGroup, "net.maxon.image.pixelformat.rgbgroup");
}

class PixelFormatIterator : public PixelFormats::RGB::Registry::Iterator
{
	MAXON_DISALLOW_COPY_AND_ASSIGN(PixelFormatIterator);

public:
	PixelFormatIterator() = default;
	PixelFormatIterator(PixelFormatIterator&& other) : PixelFormats::RGB::Registry::Iterator(std::move(other))
	{
	}
	MAXON_OPERATOR_MOVE_ASSIGNMENT(PixelFormatIterator);
};


// include autogenerated headerfile here
#include "gfx_image_pixelformat_group2.hxx"

/// @}

} // namespace maxon

#endif // GFX_IMAGE_PIXELFORMAT_GROUP_H__
