text: /***********************************************************************
   created:	03/06/2006
   author:	    Olivier Delannoy
  
   purpose:	Define the abstract interface for all common ImageCodec
   *************************************************************************/
  /***************************************************************************
   *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
   *
   *   Permission is hereby granted, free of charge, to any person obtaining
   *   a copy of this software and associated documentation files (the
   *   "Software"), to deal in the Software without restriction, including
   *   without limitation the rights to use, copy, modify, merge, publish,
   *   distribute, sublicense, and/or sell copies of the Software, and to
   *   permit persons to whom the Software is furnished to do so, subject to
   *   the following conditions:
   *
   *   The above copyright notice and this permission notice shall be
   *   included in all copies or substantial portions of the Software.
   *
   *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
   *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
   *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   *   OTHER DEALINGS IN THE SOFTWARE.
   ***************************************************************************/
  #ifndef _CEGUIImageCodec_h_
  #define _CEGUIImageCodec_h_
  
  #include "CEGUI/Base.h" 
  #include "CEGUI/DataContainer.h"
  #include "CEGUI/Texture.h" 
  
  // Start of CEGUI namespace section 
  namespace CEGUI {
  /*!
   \brief
   Abstract ImageLoader class. An image loader encapsulate the loading of a texture.
  
   This class define the loading of an abstract
   */
  class CEGUIEXPORT ImageCodec: public AllocatedObject<ImageCodec> {
  public:
  	/*!
  	 \brief
  	 Destructor
  	 */
  	virtual ~ImageCodec();
  
  protected:
  	/*
  	 \brief
  	 Constructor
  
  	 \param name of the codec
  	 */
  	ImageCodec(const String& name);
  
  public:
  	/*!
  	 \brief
  	 Return the name of the image codec object
  
  	 Return the name of the image codec
  
  	 \return a string containing image codec name
  	 */
  	const String& getIdentifierString() const;
  
  	/*!
  	 \brief
  	 Return the list of image file format supported
  
  	 Return a list of space separated image format supported by this
  	 codec
  
  	 \return
  	 list of supported image file format separated with space
  	 */
  	const String& getSupportedFormat() const;
  
  	/*!
  	 \brief
  	 Load an image from a memory buffer
  
  	 \param data the image data
  
  	 \param result the texture to use for storing the image data
  
  	 \return result on success or 0 if the load failed
  	 */
  	virtual Texture* load(const RawDataContainer& data, Texture* result) = 0;
  
  private:
  	String d_identifierString; //!< display the name of the codec
  
  protected:
  	String d_supportedFormat; //!< list all image file format supported
  
  private:
  	ImageCodec(const ImageCodec& obj);
  	ImageCodec& operator=(ImageCodec& obj);
  };
  
  } // End of CEGUI namespace section 
  
  #endif // end of guard _CEGUIImageCodec_h_
  