sound/codec.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2005-2007 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_sound_codec_h
00022 #define neo_sound_codec_h
00023 
00027 #include "../core/platform.h"
00028 
00029 #if NEO_ENABLE_SOUND
00030 
00031 #include "../core/array.h"
00032 #include "../core/singleton.h"
00033 
00034 #include <string>
00035 
00036 namespace neo {
00037 namespace file { class IStream; class OStream; }
00038 namespace sound {
00039 
00040 class SoundData;
00041 
00052 class Codec
00053 {
00054     public:
00055 
00057     virtual                                                ~Codec();
00058 
00060 
00063     virtual SoundData*                                      load( neo::file::IStream* p_stream ) const = 0;
00064 
00066 
00069     virtual void                                            save( neo::file::OStream* p_stream, const SoundData& sound ) const = 0;
00070 
00072 
00074     inline const core::Array< std::string >&                getExtensions() const;
00075 
00076     protected:
00077 
00079     core::Array< std::string >                              _extensions;
00080 };
00081 
00089 class CodecManager : public core::Singleton< CodecManager >
00090 {
00091     public:
00092 
00094 
00096     void                                                    insertCodec( Codec* p_codec );
00097 
00099 
00101     void                                                    removeCodec( Codec* p_codec );
00102 
00104 
00107     const Codec*                                            getCodec( const std::string& ext ) const;
00108 
00110 
00112     inline const core::Array< Codec* >&                     getCodecs() const;
00113 
00114     protected:
00115 
00117     core::Array< Codec* >                                   _codecs;
00118 
00120 
00121                                                             CodecManager();
00122 
00124 
00125     virtual                                                ~CodecManager();
00126 
00127     friend class core::Singleton< CodecManager >;
00128 };
00129 
00130 #include "codec.inl"
00131 
00132 }
00133 }
00134 
00135 #endif
00136 
00137 #endif

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