/*************************************************************************/
/*	File : CKDataReader.h												 */
/*	Author :  Aymeric BARD												 */	
/*																		 */	
/*	Virtools SDK 														 */	 
/*	Copyright (c) Virtools 2001, All Rights Reserved.					 */	
/*************************************************************************/
#ifndef _CKDATAREADER_H_
#define _CKDATAREADER_H_

#include "CKDefines.h"

/**********************************************************
Summary: Readers loading/saving capabilities.

Remarks:
	A Reader (either bitmap,sound or model) must implement the GetFlags method
to indicate its loading / saving capabilities by returning a combination 
of the following flags.
See Also:CKDataReader::GetFlags
**********************************************************/
typedef enum CK_DATAREADER_FLAGS {
	CK_DATAREADER_FILELOAD		= 0x00000001,		// This reader can load data from file
	CK_DATAREADER_FILESAVE		= 0x00000002,		// This reader can save data to file
	CK_DATAREADER_MEMORYLOAD	= 0x00000004,		// This reader can load data from memory
	CK_DATAREADER_MEMORYSAVE	= 0x00000008,		// This reader can save data to memory
	CK_DATAREADER_STREAMFILE	= 0x00000010,		// This reader can stream data from file
	CK_DATAREADER_STREAMURL		= 0x00000020,		// This reader can stream data from URL
	CK_DATAREADER_VXSTREAMLOAD	= 0x00000040,		// This reader can load data from a VxStream
} CK_DATAREADER_FLAGS;


/**********************************************************
Summary: Base class for all reader plugins

Remarks:
This class declares the common methods used by all reader plugins which are:

	+ Save Options (GetOptionDescription & GetOptionsCount) essentially used by bitmap plugins)
	+ Reader Description (GetReaderInfo)
	+ Readers loading/saving capabilities (GetFlags)

When done using a reader (normally returned by a call to the CKPluginManager), it must 
be released by calling its Release() method which will take care of deleting the reader object.

See Also:Creation of Media Plugins,CKBitmapReader,CKSoundReader,CKMovieReader,CKModelReader
*********************************************************************/
class CKDataReader
{
public:
	
	virtual ~CKDataReader() {}
	/************************************************
	Summary: Destroys the reader.
	Remarks:
		This method is often implemented as delete(this);
	as it should destroy the reader.
	************************************************/
	virtual void Release() = 0;
	/************************************************
	Summary: Returns a description of the reader.
	Return Value:
		A pointer to a CKPluginInfo structure that describes this reader. 
	See Also: CKPluginInfo
	************************************************/
	virtual CKPluginInfo* GetReaderInfo() = 0;

	/************************************************
	Summary: Returns the number of options.
	Return Value:
		Number of options this reader supports.
	Remarks:
		Refer to The Media Options part in the Creation of Bitmap Media Plugins chapter for more details on this method.
	See Also:Creation of Bitmap Media Plugins,GetOptionDescription
	************************************************/
	virtual int GetOptionsCount() = 0;

	/************************************************
	Summary: Returns a string describing a given option.
	Arguments:
		i: Index of option which name string should be returned.
	Return Value:
		String description of the i th option.
	Remarks:
		Refer to The Media Options part in the Creation of Bitmap Media Plugins	chapter for more details on this method.
	See Also:GetOptionsCount,Creation of Bitmap Media Plugins
	************************************************/
	virtual CKSTRING GetOptionDescription(int i) = 0;
	
	/************************************************
	Summary: Returns the reader loading/saving capabilities.
	Return Value:
		A combination of CK_DATAREADER_FLAGS reader capabilities.
	Remarks:
		A Reader can load or save  data from file,memory or an URL.
	This method returns a combination of CK_DATAREADER_FLAGS which indicates
	which of these functionnalities are supported.
	See Also: CK_DATAREADER_FLAGS
	************************************************/
	virtual CK_DATAREADER_FLAGS GetFlags() = 0;
	
};

#endif