image/codec.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2004-2006 by Reality Rift Studios                       *
00003  *   http://www.realityrift.com  -  mattias@realityrift.com                *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00019  ***************************************************************************/
00020 
00021 #ifndef neo_image_codec_h
00022 #define neo_image_codec_h
00023 
00027 #include "../core/platform.h"
00028 #include "../core/array.h"
00029 #include "../core/singleton.h"
00030 
00031 #if NEO_ENABLE_IMAGE
00032 
00033 namespace neo {
00034 namespace file { class IStream; class OStream; }
00035 namespace render { class TextureGenerator; }
00036 namespace image {
00037 
00038 class Image;
00039 
00063 class Codec
00064 {
00065     public:
00066 
00068     inline virtual                                         ~Codec();
00069 
00071 
00076     virtual Image*                                          load( neo::file::IStream* p_stream ) const = 0;
00077 
00079 
00083     virtual void                                            save( neo::file::OStream* p_stream, const Image& image ) const = 0;
00084 
00086 
00090     inline const core::Array< std::string >&                getExtensions() const;
00091 
00092     protected:
00093 
00095     core::Array< std::string >                              _extensions;
00096 };
00097 
00105 class CodecManager : public core::Singleton< CodecManager >
00106 {
00107     public:
00108 
00110 
00113     void                                                    insertCodec( Codec* p_codec );
00114 
00116 
00120     void                                                    removeCodec( Codec* p_codec );
00121 
00123 
00127     const Codec*                                            getCodec( const std::string& ext ) const;
00128 
00130 
00132     inline const core::Array< Codec* >&                     getCodecs() const;
00133 
00134     private:
00135 
00137     core::Array< Codec* >                                   _codecs;
00138 
00140 
00141                                                             CodecManager();
00142 
00144 
00145     virtual                                                ~CodecManager();
00146 
00147     friend class core::Singleton< CodecManager >;
00148 };
00149 
00150 #include "codec.inl"
00151 
00152 }
00153 }
00154 
00155 #endif
00156 
00157 #endif

Generated on Sat Feb 17 20:50:48 2007 for NeoEngine 2 - Evolution by  doxygen 1.5.1